2014-11-03 14 views
5

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?

+3

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ć. –

Odpowiedz

4

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.

+0

Dziękuję za odpowiedź. Przepraszamy, ale nie mogę rozwiązać ** klasy ** BoundFieldModule ** i ** @ Bind ** adnotacji. – Nikolas

+1

@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. –