Sto lavorando a un'applicazione Android
e ho utilizzato Dagger
per l'integrazione delle dipendenze.Override Dagger Module in Robolectric Test
Sto provando a testare un frammento che ha una di queste dipendenze, chiamiamolo ProductsService
.
Nella mia prova Robolectric
ho ottenuto fino ad avere un modulo di test che sostituisce 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);
}
}
Nella mia prova, al fine di eseguire il mio frammento costruisco come segue (come si vede qui 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();
Il problema è, in questa creazione fa chiamata a Dagger
per soddisfare sia le dipendenze:
Come sovrascrivo il grafico dell'oggetto creato quando viene creato il frammento, per utilizzare lo MockProductsModule
che dichiaro nel mio test?
Bel suggerimento. Ho creato un metodo per iniettare un oggetto grafico e l'ho usato nei test, ma la tua soluzione non ha svantaggi nella progettazione dell'odore (ma ha degli svantaggi dei test dell'olfatto :)). Grazie! –
Beh, non è la mia soluzione, dite grazie ai ragazzi di Square;) – futtetennista