9

Dobrzy ludzie w Zend i wielu blogerów polecają nowy lokalizator/menedżer usług dla ZF2, zamiast wbudowanego systemu iniekcji Dependency.ZF2 lokalizator usług i wtrysk zależności

Moje pytanie brzmi: czy możliwe/wygodne jest wstrzykiwanie próbnych obiektów do usługi? Widziałem trochę nieuporządkowane próby tego w bootstrapie PHPUnit modułu; ale czy istnieje sposób korzystania z tego systemu usług, który jest tak czysty i wygodny jak, powiedzmy, ZF1 + Yadif?

Odpowiedz

12

Tak, można wstrzykiwać fałszywe obiekty do usługi. Dla testów jednostkowych, lokalizator usługa nawet nie wchodzą w grę:

$service = new MyService($mockDependency); 

Jeśli piszesz kompleksowe testy integracyjne, w których trzeba użyć lokalizatora usług być skonfigurowany z wykresu zależności i mocks można konfiguracja coś, co robię z moim modułów:

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

można znaleźć przykład ServiceManagerFactory w DoctrineORMModule na https://github.com/doctrine/DoctrineORMModule/blob/0.7.0/tests/DoctrineORMModuleTest/Util/ServiceManagerFactory.php

Działa to przy założeniu, że service_that_uses_a_connection jest tworzone przez fabrykę, która wprowadza do niej connection_service_name.

Możesz nadal używać także Zend\Di, jeśli chcesz, ale w takich przypadkach nie jest to naprawdę potrzebne.

+1

Dziękuję za pomoc! Mam nadzieję, że pewnego dnia dokumentacja Zend będzie tak jasna! – AgileTillIDie

+2

@AgileTillIDie proszę Zrób to sam! https://github.com/zendframework/zf2-documentation - jeśli nie masz GIT-fu, nadal możesz edytować go online w interfejsie Github. – Ocramius

Powiązane problemy