2013-06-20 10 views
9

Pracuję nad aplikacją Android i używam Dagger do wstrzykiwania zależności.Zastępowanie modułu sztyletów w testach robolicznych

Próbuję teraz przetestować fragment, który ma jedną z tych zależności, nazwijmy to ProductsService.

W moim teście Robolectric Mam miarę konieczności moduł testowy, który zastępuje ProductsService:

@Module(
     includes = ProductsModule.class, 
     injects = { 
       Fragment.class, 
       FragmentTest.class 
     }, 
     overrides = true 
) 
static class MockProductsModule { 
    @Provides 
    @Singleton 
    public ProductsService providesProductsService() { 
     return Mockito.mock(ProductsService.class); 
    } 
} 

W moim teście, w celu uruchomienia mój fragment skonstruować ją następująco (jak widać tutaj How can I test fragments with Robolectric?)

 FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class) 
      .create() 
      .start() 
      .resume() 
      .get(); 

    FragmentManager fragmentManager = activity.getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(fragment, null); 
    fragmentTransaction.commit(); 

problem, w tym tworzenia sprawia, że ​​wezwanie do Dagger zaspokoić jego zależności:

((MyApplication)getActivity().getApplication()).inject(this); 

Jak przesłonić wykres obiektu utworzonego po utworzeniu fragmentu, aby użyć MockProductsModule Deklaruję w moim teście?

Odpowiedz

12

Przypuszczam, że tworzysz wykres obiektów w Application.onCreate(). Jeśli tak jest i jeśli używasz programu Robolectric 2, możesz utworzyć aplikację testową zgodnie z objaśnieniem here i utworzyć wykres obiektów dla testów za pomocą modułów testowych (aplikacja testowa i testowa musi dziedziczyć z tej samej klasy bazowej). Aby uzyskać więcej informacji na ten temat, możesz spojrzeć na here. Mam nadzieję, że to pomoże.

+0

Dobra sugestia. Zrobiłem metodę wstrzykiwania obiektu grafów i stosowałem to w testach, ale twoje rozwiązanie nie ma wad konstrukcji zapachu (ale ma wady testów zapachu :)). Dziękuję Ci! –

+0

Cóż, to nie jest moje rozwiązanie, powiedzmy dzięki chłopakom z Square;) – futtetennista