使用 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 之后注入它,如下所示:
测试网络模块.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'