Piszę test jednostkowy dla metody klasy, która wywołuje metodę innej klasy za pomocą makiety, tylko metoda, która musi zostać wywołana, jest zadeklarowana jako ostateczna, więc PHPUnit nie jest w stanie drwić z tego. Czy mogę zastosować inne podejście?Metody klasy skrótowej PHPUnit zadeklarowane jako "ostateczne"
przykład:
klasa być wyśmiewany
class Class_To_Mock
{
final public function needsToBeCalled($options)
{
...
}
}
mój przypadek testowy
class MyTest extends PHPUnit_Framework_TestCase
{
public function testDoSomething()
{
$mock = $this->getMock('Class_To_Mock', array('needsToBeCalled'));
$mock->expects($this->once())
->method('needsToBeCalled')
->with($this->equalTo(array('option'));
}
}
Edit: W przypadku korzystania z rozwiązania dostarczonego przez Mike B i masz Ustawiacz/getter za kpiący obiekt, który sprawdza typ (w celu zapewnienia, że właściwy obiekt został przekazany do setera), yo będziesz musiał kpić z gettera z klasy, którą testujesz, i poprosić o zwrot drugiej sztuczki.
przykład:
klasa być wyśmiewany
class Class_To_Mock
{
final public function needsToBeCalled($options)
{
...
}
}
mock
class Class_To_MockMock
{
public function needsToBeCalled($options)
{
...
}
}
klasy mają być testowane
class Class_To_Be_Tested
{
public function setClassToMock(Class_To_Mock $classToMock)
{
...
}
public function getClassToMock()
{
...
}
public function doSomething()
{
$this->getClassToMock()
->needsToBeCalled(array('option'));
}
}
mój przypadek testowy
class MyTest extends PHPUnit_Framework_TestCase
{
public function testDoSomething()
{
$classToTest = $this->getMock('Class_To_Be_Tested', array('getClassToMock'));
$mock = $this->getMock('Class_To_MockMock', array('needsToBeCalled'));
$classToTest->expects($this->any())
->method('getClassToMock')
->will($this->returnValue($mock));
$mock->expects($this->once())
->method('needsToBeCalled')
->with($this->equalTo(array('option'));
$classToTest->doSomething();
}
}
Ah, nieodebrane, że w instrukcji, dzięki –
Jest to dodatkowy krok trzeba Jeżeli klasa testowanie polega na procederze pobierającym/ustawiającym, który sprawdza typ sprawdzanej klasy/metody. Dodałem to do oryginalnego wpisu. –
@rr Proszę rozważyć dodanie tego jako odpowiedzi, zamiast umieszczania rozwiązania w pytaniu. – BartoszKP