Der Dagger 2 documentation suggests providing different configurations zum Testen und Produktion eine interface
für ProductionComponent
und TestComponent
mit wie folgt verwendet:Testing mit Dagger 2 separate Komponentenkonfigurationen in Android
@Component(modules = {
OAuthModule.class, // real auth
FooServiceModule.class, // real backend
OtherApplicationModule.class,
/* … */ })
interface ProductionComponent {
Server server();
}
@Component(modules = {
FakeAuthModule.class, // fake auth
FakeFooServiceModule.class, // fake backend
OtherApplicationModule.class,
/* … */})
interface TestComponent extends ProductionComponent {
FakeAuthManager fakeAuthManager();
FakeFooService fakeFooService();
}
Lassen Sie uns sagen, dass wir ein Android-Aktivität (MyApp
), die ProductionComponent
verwendet:
public class MyApp extends Application {
private ProductionComponent component;
@Override public void onCreate() {
super.onCreate();
component = ProductionComponent.builder()
.serverModule(new ServerModule())
.build();
}
}
im Allgemeinen, was der beste Weg ist DaggerTestComponent.builder()
zu verwenden, anstatt ProductionComponent.builder()
in Androi d Integrationstests?
Ich bin mir nicht sicher, wie man die Fälschungen benutzt; Sollte ich eine neue Aktivität in /androidTest
welche extends MyApp
machen? Oder sollte ich eine neue DaggerTestComponent
in MyApp
mit einem Getter/Setter übergeben, wenn ich meinen Test einrichten?
eine sehr hilfreiche Lösung bei https://blog.egorand.me/providing-test-doubles-with-dagger-1-and-dagger-2/ gefunden – user2560886