【发布时间】:2018-09-13 06:14:01
【问题描述】:
我的 Symfony (3.4) 应用程序中有一个服务类 (OutletScraper)。该类使用实体管理器和 Bazinga 地理编码器包提供的地理编码服务。我已经成功配置了两者,以便我能够从我的服务类中调用它们。每当我需要该服务时,我都会从容器中调用它,以便已经将实体管理器和地理编码器捆绑包注入其中。
在测试时,我知道我可以模拟实体管理器,然后将其提供给我的测试类。当我从容器访问服务类时,如何覆盖传递给构造函数的内容?即,这样我就可以提供模拟实体管理器,而不是注入真实的实体管理器。我尝试手动实例化服务类的对象:
$outletScraper = new OutletScraper(new Provider(), $this->createMock(EntityManagerInterface::class));
但是这样做时出现以下错误:
Error: Cannot instantiate interface Geocoder\Provider\Provider
如何正确实例化这个类?我需要从服务容器中调用它(它设置为私有)吗?感谢任何帮助。
【问题讨论】:
标签: php symfony service phpunit containers