Мне нужна помощь, чтобы полностью протестировать мой класс, который зависит от Doctrine.
У меня есть один метод в моем классе, который использует этот метод магияfindOneBy ... из Doctrine EntityRepository, как показано ниже:
Но когда я запускаю свой тест, у меня всегда появляется это предупреждение:
Как я могу высмеять этот призыв? Ниже я описал, как должен работать магический метод __call EntityManager:
setMethods можно использовать для добавления методов к фиктивному объекту. phpunit.de/manual/current/en/test-doubles.html
Имя поля - $ idShopUrl, в коде выполнения все в порядке, ничего не сломано, но я хотел бы знать, как имитировать / протестировать его.




Думаю, можно заменить волшебный метод findOneByXXXX ('идентификатор') на реальный метод findOneBy (array ('XXXX' => 'identifier')).
То есть:
$this->shopUrlRepository->findOneByIdShopUrl($this->shop->getId());
К:
$this->shopUrlRepository->findOneBy(array('IdShopUrl' => $this->shop->getId()));
Это настоящий метод. Документация доктрины
Я надеюсь это тебе поможет.
Оба случая действительны, но в этом сценарии для меня важно знать, как над ним издеваться :)
Вы можете имитировать магический метод __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();
а затем остальная логика с такими методами, как воля, с т. д.
setMethods устарел. Предполагаемая функциональность теперь обеспечивается addMethods: github.com/sebastianbergmann/phpunit/pull/3687
как называется ваше поле или вы можете показать свою сущность?