9

Zend'deki iyi insanlar ve bir dizi blogcu, dahili Bağımlılık Enjeksiyon sisteminden ziyade ZF2 için yeni servis belirleyici/yöneticisini tavsiye ediyor.ZF2 servis bulucu ve bağımlılık enjeksiyonu

Soruma göre, sahte nesneleri bir servise enjekte etmek mümkün/uygun mu? Bir modülün PHPUnit bootstrapinde bunu yapmak için biraz sakar girişimler gördüm; fakat ZF1 + Yadif gibi temiz ve kullanışlı bu servis sistemini kullanmanın bir yolu var mı?

cevap

12

Evet, sahte nesneleri bir servise enjekte edebilirsiniz. Bir birim testi için, hizmet bulucu bile oyuna gelmiyor: Eğer bağımlılıkları ve mocks yapabilirsiniz bir grafik ile yapılandırılacak Servis yerini öğrenmek gerekir karmaşık entegrasyon testleri yazıyorsanız

$service = new MyService($mockDependency); 

benim modülleri ile ne yapıyorum gibi kurulum şey: Buvarsayarak çalışır https://github.com/doctrine/DoctrineORMModule/blob/0.7.0/tests/DoctrineORMModuleTest/Util/ServiceManagerFactory.php

de DoctrineORMModule içinde ServiceManagerFactory bir örneğini bulabilirsiniz

$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'); 

0, connection_service_name ürününü içine enjekte eden bir fabrika tarafından başlatılır.

Ayrıca isterseniz Zend\Di'u da kullanabilirsiniz, ancak bu gibi durumlarda gerçekten gerekli değildir.

+1

Yardımlarınız için teşekkür ederiz! Umarım bir gün Zend belgeleri bu açıklığa kavuşacaktır! – AgileTillIDie

+2

@AgileTillIDie lütfen kendinize katkıda bulunun! https://github.com/zendframework/zf2-documentation - GIT-fu'nız yoksa Github UI'de çevrimiçi düzenleyebilirsiniz. – Ocramius

İlgili konular