Android 改装2.0+;匕首2.0多个调度程序
我目前有一个Android 改装2.0+;匕首2.0多个调度程序,android,unit-testing,retrofit2,dagger-2,Android,Unit Testing,Retrofit2,Dagger 2,我目前有一个改进的客户端类来进行网络呼叫。同样的客户端也用于单元测试。我想要的是继续使用相同的类,但如果单元测试应用程序只需切换调度程序,以便同步执行所有网络调用并监控结果 最简单的方法是使用dagger2.0为调度器创建两个提供如下方法的方法: @Provides @Named("RealDispatcher") @Singleton public Dispatcher provideDispatcher() { dispatcher = new Dispatcher();
改进的客户端类来进行网络呼叫。同样的客户端也用于单元测试。我想要的是继续使用相同的类,但如果单元测试应用程序只需切换调度程序
,以便同步执行所有网络调用并监控结果
最简单的方法是使用dagger2.0为调度器创建两个提供如下方法的方法:
@Provides
@Named("RealDispatcher")
@Singleton
public Dispatcher provideDispatcher() {
dispatcher = new Dispatcher();
return dispatcher;
}
@Provides
@Named("TestDispatcher")
@Singleton
public Dispatcher provideTestDispatcher() {
dispatcher = new Dispatcher(newSynchronousExecutorService());
return dispatcher;
}
组件类:
@Singleton
@Component(modules = {RetrofitModule.class})
public interface RetrofitComponent {
void inject(RestClient restClient);
}
难题是,如何根据调度器处于“默认”模式还是“单元测试”模式动态切换调度器
。既然注射用Dagger 2.0
中的类型关联很强,我怎么能一直改变它呢
改装
客户端设置:
public class RestClient {
private static ApiCall REST_CLIENT;
@Inject
@Named("RealDispatcher")
static Dispatcher dispatcher; ---> need to switch this dynamically
private static void setupRestClient() {
retrofitComponent.inject(this);
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(Level.BODY);
OkHttpClient httpClient = new OkHttpClient();
httpClient.setDispatcher(dispatcher); ---->add dispatcher based on "default" or "unit testing" mode.
httpClient.interceptors().add(logging);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MainActivity.URL)
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
REST_CLIENT = retrofit.create(ApiCall.class);
}
}