हां, आप एक सेवा में नकली वस्तुओं को इंजेक्ट कर सकते हैं। एक इकाई परीक्षण के लिए, सेवा लोकेटर भी खेलने में नहीं आता:
$service = new MyService($mockDependency);
आप जटिल एकीकरण परीक्षणों जहां निर्भरता और mocks, आप कर सकते हैं का ग्राफ साथ विन्यस्त किया जा करने के लिए सेवा लोकेटर उपयोग करने की आवश्यकता लिख रहे हैं, तो मैं अपने मॉड्यूल के साथ क्या कर रहा हूँ की तरह सेटअप कुछ:
$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');
आप https://github.com/doctrine/DoctrineORMModule/blob/0.7.0/tests/DoctrineORMModuleTest/Util/ServiceManagerFactory.php
पर DoctrineORMModule
में ServiceManagerFactory
का एक उदाहरण मिल सकता है यह मानते हुए काम करता है कि service_that_uses_a_connection
को ऐसे फैक्ट्री द्वारा तत्काल किया जाता है जो connection_service_name
इंजेक्ट करता है।
यदि आप चाहें तो भी आप Zend\Di
का उपयोग कर सकते हैं, लेकिन इस तरह के मामलों में इसकी वास्तव में आवश्यकता नहीं है।
आपकी मदद के लिए धन्यवाद! उम्मीद है कि एक दिन ज़ेंड दस्तावेज यह स्पष्ट होगा! – AgileTillIDie
@AgileTillIDie कृपया स्वयं को योगदान दें! https://github.com/zendframework/zf2- दस्तावेज - यदि आपको कोई जीआईटी-फू नहीं मिला है, तो भी आप इसे गीथूब यूआई में ऑनलाइन संपादित कर सकते हैं। – Ocramius