3
我写一个单元测试和需要模拟可观察到的(来自改型)RxAndroid - java.lang.IllegalStateException:另一种策略已经注册
在所测试的组件中的代码如下:
getApiRequestObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(...)
在单元测试(针对JVM所以AndroidSchedulers
不可用),我需要让所有的同步,所以我的测试将是这样的:
@Test
public void testSomething() {
doReturn(mockedResponse).when(presenter).getApiRequestObservable();
presenter.callApi();
verify(object,times(1)).someMethod();
}
要做到这一点,我应该在设置()方法注册挂钩:
@Before
public void setUp() throws Exception {
// AndroidSchedulers.mainThread() is not available here so we fake it with this hook
RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
// We want synchronous operations
RxJavaPlugins.getInstance().registerSchedulersHook(new RxJavaSchedulersHook(){
@Override
public Scheduler getIOScheduler() {
return Schedulers.immediate();
}
});
}
但是,这将引发上述异常,因为我显然没有获准注册两个挂钩。有没有办法解决这个问题?