2013-06-05 11 views
6

Czy można dodać stałą klasy do makiety za pomocą PHPUnit?Dodaj stałą do makiety w PHPUnit

Oto przykład:

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; 
    } 
} 

Czy ktoś z was wie jak mogę to behavious do pracy?

Thx!

+0

Czy klasa Reflection osiągnie to, co chcesz? http://php.net/manual/en/book.reflection.php –

Odpowiedz

2

To pytanie pojawiło się około chwili bez odpowiedzi, ale wpadłem na ten sam problem. To nie wydaje się możliwe; Jednakże, istnieje co najmniej jeden brudny obejście:

W pliku testowego

<?php 

class SomeClass { 
    const FOOBAR = 'foobar'; 
} 

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

// tests 

?> 

Następnie należy użyć szydzili obiekt dla wyśmiewali funkcjonalność i użyć klasy stały się tak samo trzeba pierwotnie . Na przykład:

// 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; 

Jest brudny, więc jestem pewien, że wszystko może się całkiem pomieszane jeśli używasz jakiegoś autoloading że próbuje załadować rzeczywistego SomeClass klasy, ale to będzie działać „fine” jeśli nie ładujesz oryginału SomeClass.

Jestem zdecydowanie zainteresowany, aby usłyszeć inne rozwiązania, a także uzyskać informacje zwrotne na temat tego, jak bardzo jest brudny.

+0

Prawdopodobnie 'SomeClass' powinno być zadeklarowane jak **' class SomeClassMock extends SomeClass' ** dla tego podejścia do pracy tak, jak powinno i 'SomeClass' samo w sobie nie powinno być "ostateczne". –