2013-06-20 21 views
9

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?

risposta

12

Suppongo che si stia creando il grafico dell'oggetto in Application.onCreate(). In questo caso, se si sta utilizzando Robolectric 2, è possibile creare un'applicazione di test come spiegato here e creare un grafico oggetto per i test con i moduli di test (l'applicazione prod e test deve ereditare dalla stessa classe base). Per maggiori informazioni su questo, è possibile dare un'occhiata a here. Spero che sia d'aiuto.

+0

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! –

+0

Beh, non è la mia soluzione, dite grazie ai ragazzi di Square;) – futtetennista

Problemi correlati