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