我需要一些帮助才能完全测试依赖于Doctrine的课程。
我的类中有一个方法,它使用Doctrine EntityRepository 中的 magic 方法 findOneBy ... ,如下所示:< / p>
但是当我进行测试时,我总是有这个警告:
我该如何模拟那个电话?下面我介绍 EntityManager magic __call方法应该如何工作:
答案 0 :(得分:0)
我认为您可以使用真实方法findOneBy(array('XXXX'=&gt;'identifier'))替换魔法方法findOneByXXXX('identifier')。
也就是说:
$this->shopUrlRepository->findOneByIdShopUrl($this->shop->getId());
要:
$this->shopUrlRepository->findOneBy(array('IdShopUrl' => $this->shop->getId()));
这是一种真正的方法。 Doctrine documentation
我希望这可以帮到你。
答案 1 :(得分:0)
你可以模拟在调用不可能的方法时调用的魔术方法__call
。
$mock
->expects($this->once())
->method('__call')
->with(
$this->equalTo('findOneByIdShopUrl'), //
$this->equalTo(['5'])
)
->willReturn(['shop' => 'shop info']); // return shop object
同时检查http://php.net/manual/en/language.oop5.overloading.php#object.call
另一种选择是使用setMethods()
$this->getMockBuilder('ShopRepository')->setMethods(['findOneByShopId'])->getMock();
然后使用诸如will等方法的其余逻辑