Jak przetestować implementacje Guice AbstractModule w dużym projekcie bez tworzenia fałszywych implementacji? Czy można testować metody bind() i inject()?Jak przetestować implementacje Guice AbstractModule?
Odpowiedz
Zazwyczaj najlepszym sposobem na przetestowanie modułów Guice jest stworzenie wtryskiwacza w teście i zapewnienie, że można uzyskać instancje kluczy, którymi się interesujesz.
Aby to zrobić bez powodowania problemów z produkcją, konieczne może być zastąpienie niektórych modułów innymi modułami. Możesz użyć Modules.override
do selektywnego przesłonięcia pojedynczych powiązań, ale zazwyczaj lepiej jest nie instalować modułów typu "produkcja" i zamiast tego używać fałszywych powiązań.
Od Guice 4.0 jest pomocnik klasy BoundFieldModule
, który może pomóc w tym. Często skonfigurować testy takie jak:
public final class MyModuleTest {
@Bind @Mock DatabaseConnection dbConnection;
@Bind @Mock SomeOtherDependency someOtherDependency;
@Inject Provider<MyThing> myThingProvider;
@Before public void setUp() {
MockitoAnnotations.initMocks(this);
Guice.createInjector(new MyModule(), BoundFieldModule.of(this))
.injectMembers(this);
}
@Test public void testCanInjectMyThing() {
myThingProvider.get();
}
}
tam bardziej documentation for BoundFieldModule
na wiki Guice.
Dziękuję za odpowiedź. Przepraszamy, ale nie mogę rozwiązać ** klasy ** BoundFieldModule ** i ** @ Bind ** adnotacji. – Nikolas
@Nikolas: Możesz zrobić to samo, po prostu tworząc anonimową podklasę 'AbstractModule' w swoim teście, oczywiście -' BoundFieldModule' to tylko skrót. (Jeśli nie jest dostępny w twoim projekcie, możesz chcieć uaktualnić Guice do najnowszej wersji.) Ważną częścią odpowiedzi jest to, że najlepszym sposobem na zapewnienie twoich zależności jest stworzenie "wtryskiwacza" w teście, i sprawdź, czy działa zgodnie z oczekiwaniami. –
- 1. Guice wstrzykuje tylko niektóre konstruktory
- 2. Wskaźnik zerowania guice Guine
- 3. Moduł Guice z parametrami typu
- 4. Guice Beginner - jak wiązać konkretne klasy?
- 5. wstrzykiwanie nazwie Guice singleton
- 6. Wyjątek ClassNotFoundException z Guice 2.0
- 7. Guice chętnych/leniwe instynkty singletonowe
- 8. Jak mogę przetestować, czy implementacje są synchroniczne lub asynchroniczne, gdy jest to wymagane?
- 9. Wiązanie Guice na listę ogólnych obiektów
- 10. Jak korzystać z AssistedInject Guice?
- 11. Jak korzystać z wtryskiwacza Guice?
- 12. jak automatycznie podłączyć HibernateBundle z guice na dropwizard?
- 13. Structuremap - implementacje wielu interfejsów
- 14. Guice: Wiązanie kilku obiektów z różnymi zależnościami
- 15. Udane implementacje VoltDB
- 16. Sprzeczne implementacje cechy Rust
- 17. XPath 2.0: Otwarte implementacje
- 18. Implementacje i zdarzenia VB6
- 19. ServiceLoader znaleźć implementacje interfejsu
- 20. hierarchiczne interfejsy i implementacje
- 21. Implementacje prób JCA
- 22. Guice: implikacje zastrzyku pola
- 23. Guice kontra AspectJ
- 24. auto scan for guice
- 25. Implementacje serwera WebSocket dla Delphi
- 26. Guice: Unikaj leniwego wtrysku
- 27. Gotowy system zabezpieczający Guice?
- 28. Czy istnieją wątkowe implementacje SPARQL?
- 29. Jak przetestować usługi internetowe?
- 30. Szyny: Jak przetestować state_machine?
Nie chcesz testować frameworka, więc po prostu powiedz guice, że bind i inject działają poprawnie. Jeśli chcesz przetestować implementacje modułów, zajrzyj do Modułów.Odpowiedź, możesz zachować swoje moduły produkcyjne i nadpisać tylko tyle fałszywych/fałszywych rzeczy, aby można je było łatwo przetestować. –