使用dagger2注入依赖关系到espresso测试是我想要做的。Android咖啡 - 如何使用dagger2注入依赖关系
我想要一种能够为我的测试用例使用匕首提供依赖性的方法。
特别是有一个MockwebServer类我想用匕首注入。这是如何完成的? 我的项目已经设置了匕首。其目前和单componeent单一成分有5个模块 它看起来像这样:
@Singleton
@Component(modules = {AppModule.class, NetworkModule.class, RepositoryModule.class, UseCaseModule.class, ActivityModule.class, PresenterModule.class})
public interface AppComponent {
void inject(NetworkSessionManager target);
void inject(SplashActivity target);
void inject(AuthenticationActivity target);
void inject(WelcomeActivity target);
void inject(LoginFragment target);
}
,它工作正常。但现在,当我移动到androidTest文件夹做一个咖啡怎么考,我会使用以下组件:
//note the NetworkTestModule.class i want to use is defined instead of //networkModule.class
@Singleton
@Component(modules = {AppModule.class, NetworkTestModule.class, RepositoryModule.class, UseCaseModule.class, ActivityModule.class, PresenterModule.class})
public interface AppTestComponent
{
void inject(NetworkSessionManager target);
void inject(SplashActivity target);
void inject(AuthenticationActivity target);
void inject(WelcomeActivity target);
void inject(LoginFragment target);
void inject (MYTESTCLASS target);
}
什么,我一直在做它保持AppTestComponent在主源代码,但它不能看到MYTESTCLASS这样?
我希望注入我的课的原因,是我想注入一个mockWebServer类传递后改造为baseURL时是这样的:
TestNetworkModule.java:
@Provides
@Singleton
public Retrofit provideRetrofit(Converter.Factory converter, OkHttpClient client, @Named(BASE_URL) String baseUrl, MockWebServer server) {
return new Retrofit.Builder()
.baseUrl(server.url("/").toString())
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(converter)
.build();
}
@Singleton
@Provides
MockWebServer providerMockWebServer() {
return new MockWebServer();
}
//....
}
这方式我可以得到的MockWebServer的参考,并在我的测试中使用它,并有它的改造工作,所以我可以做快速集成测试
也gradle我使用以下依赖关系,请确认:
compile 'com.google.dagger:dagger:2.9'
testCompile 'com.google.dagger:dagger:2.9'
annotationProcessor 'com.google.dagger:dagger-compiler:2.9'
这很好。我通过为匕首创建一个重复的测试组件并使用匕首模拟来使用该测试组件来实现它。你的更好 – j2emanue
谢谢,我很高兴听到它:) –