2013-06-05 6 views
6

Ist es möglich, mit PHPUnit eine Klassenkonstante zu einem Mock hinzuzufügen?Konstante zu einem Schein in PHPUnit hinzufügen

Hier ein Beispiel:

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
     // Here I'd like to add a constant to $mock; something like 
     // $mock::FOOBAR; 
    } 
} 

Hat jemand von euch wissen, wie kann ich dieses behavious zu arbeiten?

Thx!

+0

Würde die Reflection-Klasse erreichen, was Sie wollen? http://php.net/manual/en/book.reflection.php –

Antwort

2

Diese Frage gibt es seit einiger Zeit ohne Antworten, aber ich stieß auf dasselbe Problem. Dies scheint nicht möglich zu sein; jedoch gibt es zumindest eine schmutzige Arbeit-around:

In Ihrer Testdatei

<?php 

class SomeClass { 
    const FOOBAR = 'foobar'; 
} 

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
    } 
} 

// tests 

?> 

Dann Sie verspotteten Objekt für verspottet Funktionalität zu nutzen, und verwenden Sie die Klasse konstant die gleiche Art und Weise würden Sie haben ursprünglich . Zum Beispiel:

// Call a method on mocked object 
// (would need to add this method to your mock, of course) 
$mock->doSomething(); 
// Use the constant 
$fooBar = SomeClass::FOOBAR; 

Das ist schmutzig, so dass ich bin sicher, dass die Dinge ziemlich verkorkste bekommen könnten, wenn Sie irgendeine Art von autoloading verwenden, die die tatsächliche SomeClass Klasse zu laden versucht, aber das wird funktionieren „fein“ wenn Sie das Original SomeClass nicht laden.

Ich bin auf jeden Fall daran interessiert, andere Lösungen zu hören sowie ein Feedback darüber, wie dreckig das wirklich ist.

+0

Wahrscheinlich 'SomeClass' sollte wie deklariert werden **' Klasse SomeClassMock erweitert SomeClass' **, damit dieser Ansatz so funktioniert wie er und 'SomeClass' selbst sollte nicht in seinem Wesen "endgültig" sein. –