【发布时间】:2017-06-12 10:50:23
【问题描述】:
使用 dagger2 将依赖项注入 espresso 测试是我想做的。
我想要一种能够使用 dagger 为我的测试用例提供依赖项的方法。
特别是我想用匕首注入一个MockwebServer 类。这是怎么做到的? 我的项目已经设置了匕首。它现在是一个组件,单个组件有 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 文件夹进行 espresso 测试时,我将如何使用以下组件:
//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'
【问题讨论】:
标签: android dependency-injection android-espresso dagger-2 mockwebserver