Zend的好人和一些博主正在推荐ZF2的新服务定位器/管理器,而不是其内置的依赖注入系统。ZF2服务定位器和依赖注入
我的问题是,是否可以/方便地将模拟对象注入到服务中?我在PHPUnit模块引导中看到了一些稍微笨拙的尝试;但是有没有一种方法可以像ZF1 + Yadif一样使用这种干净便捷的服务系统?
Zend的好人和一些博主正在推荐ZF2的新服务定位器/管理器,而不是其内置的依赖注入系统。ZF2服务定位器和依赖注入
我的问题是,是否可以/方便地将模拟对象注入到服务中?我在PHPUnit模块引导中看到了一些稍微笨拙的尝试;但是有没有一种方法可以像ZF1 + Yadif一样使用这种干净便捷的服务系统?
是的,您可以将模拟对象注入到服务中。对于单元测试,服务定位器甚至不发挥作用:
$service = new MyService($mockDependency);
如果你正在写,你需要使用服务定位与依赖和嘲笑,你可以的图形配置复杂的集成测试建立像什么,我与我的模块做:
$serviceLocator = ServiceManagerFactory::getServiceManager(); // see comment below
$dbConnectionMock = $this->getMock('My\Db\Connection');
$serviceLocator->setAllowOverride(true);
// replacing connection service with our fake one
$serviceLocator->setService('connection_service_name', $dbConnectionMock);
$service = $serviceLocator->get('service_that_uses_a_connection');
找到的DoctrineORMModule
ServiceManagerFactory
一个例子这工作假设service_that_uses_a_connection
由注入connection_service_name
的工厂实例化。
如果您愿意,您仍然可以使用Zend\Di
,但在这种情况下并非真正需要。
谢谢你的帮助!希望有一天Zend的文档将会清晰明了! – AgileTillIDie
@AgileTillIDie请务必为自己贡献! https://github.com/zendframework/zf2-documentation - 如果你没有GIT-fu,你仍然可以在Github UI上在线编辑它。 – Ocramius