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?
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! –
Cóż, to nie jest moje rozwiązanie, powiedzmy dzięki chłopakom z Square;) – futtetennista