2016-07-09 7 views
6

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?

+1

eine sehr hilfreiche Lösung bei https://blog.egorand.me/providing-test-doubles-with-dagger-1-and-dagger-2/ gefunden – user2560886

Antwort