PHPUnit mock выбрасывает несовместимую ошибку объявления

я использую PHPUnit 3.6.10 (к сожалению, в настоящее время я не могу перейти на более новую версию).
При работе с издевательством над устаревшим кодом я получил странную ошибку. Попробовал гугл, подошли только результаты, связанные со статическими методами, что не в моем случае.

Имея этот класс:

class ServicesMapper extends DbMapper
{
//... (some methods)

public function saveTravel(ServiceTravel $oTravel) {
$this->getAdapter()->insert('services_travels', $oTravel->getToArray());
}

//... (some methods)
}

Я пытаюсь издеваться над этим:

(внутри класса юнит-теста)

/**
* @return ServicesMapper
*/
private function getServicesMapperStub()
{
$stub = $this->getMock('ServicesMapper');

$stub->expects($this->any())
->method('searchBy')
->will($this->returnValue(array()));

return $stub;
}

Теперь, во время выполнения этого поддельного теста (я знаю, что этот тест ничего не делает, это просто для того, чтобы показать проблему):

   /**
* @test
*/
public function fakeMockTest(){
$serviceMapper = $this->getServicesMapperStub();
$this->assertTrue(true);
}

Я получаю эту ошибку:

Declaration of Mock_ServicesMapper_60b00178::saveTravel()
should be compatible with ServicesMapper::saveTravel(ServiceTravel $oTravel)

Я использую этот стиль издевательства во многих местах, он работает хорошо, за исключением этого конкретного случая. Что не так с моим кодом?

Кстати, я также пытался решить эту проблему, издеваясь saveTravel метод, без удачи.

6

Решение

Ваш код выглядит правильно и может работать с простыми заглушками, а не с фиктивными (в основном заглушка с ожиданиями).

Для издевательств нужно сделать:

$mock = $this->getMockBuilder('ServicesMapper')
->setMethods(array ('searchBy'))
->getMock();

Все методы, для которых вы хотите установить ожидания, должны быть объявлены в setMethods ().

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]