跟踪PHPUnit模拟对象创建
我在ZF2+Doctrine2项目中遇到PHPUnit测试失败:跟踪PHPUnit模拟对象创建,php,unit-testing,doctrine-orm,phpunit,Php,Unit Testing,Doctrine Orm,Phpunit,我在ZF2+Doctrine2项目中遇到PHPUnit测试失败: RuntimeException: Method "findAllByState" could not be found in repository "Mock_EntityRepository_4af853d8" 我正在使用以下方法创建模拟存储库: $repository = $this ->getMockBuilder('Doctrine\ORM\EntityRepository') -
RuntimeException: Method "findAllByState" could not be found in repository "Mock_EntityRepository_4af853d8"
我正在使用以下方法创建模拟存储库:
$repository = $this
->getMockBuilder('Doctrine\ORM\EntityRepository')
->disableOriginalConstructor()
->getMock();
$repository
->method('findAllByState')
->willReturn([]);
但这显然是不正确的。因此,我如何跟踪PHPUnit mock对象的创建,以找出创建
mock\u EntityRepository\u blah
的位置,这样我就可以告诉它关于findAllByState()
?您需要->setMethods(array('findAllByState'))
应用于mock builder。稍晚一点,在表9之后。1@xmike,谢谢,但该测试仍然会出错(不确定原因,请参见下一步),并且还会创建一个PHP致命错误:在第179行的vendor/doctor/orm/lib/doctor/orm/EntityRepository.PHP的null上调用成员函数getUnitOfWork(),终止PHPUnit,防止进一步的输出。@xmike,啊,因为setMethods()
会覆盖任何默认值,所以我需要告诉它findBy
和findAll
。谢谢-这确实解决了我的问题。但我仍然对我提出的问题感到好奇。@xmike,你想让我把我的问题作为一个问题发布,这样你就可以回答绿色的问题了吗?我从来没有尝试过以相关的深度和注意力来看待模拟生成,但概括地说,PHPUnit分析实际的类实现,从getMockBuilder
中添加您的配置(或者在模拟不存在的类时仅使用您的配置),然后生成实现行为和间谍功能的相关代码,然后eval
对其进行评估并为您实例化。您可能需要检查详细信息。