使用dagger2向espresso测试注入依赖项是我想要做的。
我希望能够使用dagger为我的测试用例提供依赖项的方法。
特别是,我想使用dagger注入MockwebServer类。如何实现?我的项目已经设置了dagger。目前只有一个组件,该组件有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类传递给Retrofit作为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 的引用,并使用它让 Retrofit 与之配合,以便进行快速的集成测试。请注意,保留 HTML 标签。
另外,在 Gradle 中我正在使用以下依赖项,请确认:
compile 'com.google.dagger:dagger:2.9'
testCompile 'com.google.dagger:dagger:2.9'
annotationProcessor 'com.google.dagger:dagger-compiler:2.9'