Uso Dagger2 nella mia app Android. Fondamentalmente inietto un HttpClient
(interfaccia) in MainActivity
.Modulo test di iniezione con dagger2
@Module
public class MainActivityModule{
@Provides public HttpClient providesHttpComponent(){
return new RealHttpClient();
}
}
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
public MainActivity injectActivity(MainActivity);
}
public class MainActivity extends Activity {
public void onCreate(Bundle saved){
super.onCreate();
injectDependencies();
}
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent(new MainActivityModule())
.build()
.injectActivity(this);
}
}
Fin qui tutto bene, funziona come previsto. Ora voglio scrivere alcuni test unitari (non test strumentazione Android) per MainActivity
dove voglio usare TestMainActivityModule
invece di MainActivityModule
.
@Module (overrides = true)
public class TestMainActivtiyModule extends MainActivityModule {
@Provides public HttpClient(){
return new MockHttpClient();
}
}
La mia domanda è: come faccio a forzare MainActivity
da usare al posto di TestMainActivitiyModule
MainActivityModule
? C'è una buona soluzione per questo?
Il mio approccio attuale è quello di utilizzare l'ereditarietà e per ignorare getModule()
, qualcosa di simile
public class TestMainActivity extend MainActivity {
@Override
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent(new TestMainActivtiyModule())
.build()
.injectActivity(this);
}
}
ed eseguire unit test contro TestMainActivity
invece di MainActivity
.
Credo che funziona, ma uno dei problemi che sto affrontando con questo approccio è che non posso iniziare TestMainActivity
con una Intent
perché non posso specificare in AndroidManifest.xml
Qualcuno sa una migliore approccio per il test unitario con dagger2 su Android?
Come commento iniziale, l'override del modulo non è una cosa in Pugnale 2.Il metodo è lì per non interrompere le compilazioni mentre le persone migrano, ma è deprecato e non ha alcun effetto su un progetto di Dagger 2. –