我正在使用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)
我在很多地方使用这种嘲讽方式,除了这个特殊情况外,效果很好。我的代码出了什么问题?
BTW:我也尝试通过模拟saveTravel
方法来解决这个问题,但没有运气。
答案 0 :(得分:3)
你的代码看起来是正确的,可能适用于简单的存根,而不是模拟(基本上是一个有期望的存根)。
对于你需要做的嘲笑:
$mock = $this->getMockBuilder('ServicesMapper')
->setMethods(array ('searchBy'))
->getMock();
您想要设置期望的所有方法都应在setMethods()上声明。