我有一个正在为其编写测试的新模块。该模块包含一个实现 ServiceLocatorAwareInterface 的类,因为它需要使用 DI 容器创建其他对象。在骨架应用程序中运行时一切正常,但在运行模块测试时,我得到以下信息:
Zend\Di\Exception\RuntimeException:“Zend\ServiceManager\ServiceLocatorInterface”的类型为“NULL”的无效实例化器
稍微研究一下,我发现 DI 容器试图创建一个“ServiceLocatorAwareInterface”类型的新对象,这当然是错误的。
在测试引导程序中进一步挖掘,我发现添加以下行可以解决问题,因为 DI 现在知道要为该接口实例化哪个类。
$di->instanceManager()->addTypePreference('Zend\ServiceManager\ServiceLocatorInterface', new \Zend\ServiceManager\ServiceManager());
我不确定这是否是问题的最佳解决方案,因为我传递的 ServiceManager 是一个虚拟的。
有没有人有任何其他想法?