我在测试中使用了一个模拟对象。真实对象PageRepository使用__call()实现了一个魔术方法,因此如果您调用$pageRepository->findOneByXXXX($value_of_field_XXXX),它将搜索与该参数匹配的记录。
是否有一种方法可以模拟该方法?
真实方法调用看起来像这样:
$homepage = $pageRepository->findOneBySlug('homepage');
测试会像这样:
$mockPageRepository->expects($this->any())
->method('findOneBySlug')
->will($this->returnValue(new Page()));
但它不起作用-- PHPUnit没有检测到方法调用。唯一让它看到该方法的方法是在PageRepository中明确定义该方法。
setMethods()
,例如$this->getMockBuilder('ClassName')->setMethods(['findById'])->getMock();
,因为getMock()
在builder上不接受任何参数。 - J-P