【发布时间】:2015-05-10 21:33:48
【问题描述】:
如果我模拟存储库方法find 我会得到预期的结果,
但如果我打电话给findBy、findOneBy、findOneById,我总是会得到null。
代码示例:
$mock->expects($this->once())
->method('getId')
->will($this->returnValue(1));
$mockRepository->expects($this->any())
->method('findBy') //if here I use 'find' works for all other cases always null
->will($this->returnValue($mock));
发生这种情况有什么原因吗?
是否可以像 findById 或 findOneById 这样模拟 Doctrine2 的“魔术”方法?
如果是,我的方法有什么问题?
【问题讨论】:
-
我猜你必须模拟
__call方法 -
__call拨打电话至findBy或findOneBy -
由于使用的是mock,除非使用部分mock,否则__call方法(或mocked对象的任何其他方法)不会调用原始方法,而是默认返回null
-
@Matteo,完全没有,我只是暂停了测试套件一段时间,因为我必须处理更高优先级的其他事情。
-
好的,如果我能帮助你解决这个问题,请告诉我:)
标签: php unit-testing doctrine-orm mocking phpunit