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();
}
});
}
但是,這將引發上述異常,因爲我顯然沒有獲准註冊兩個掛鉤。有沒有辦法解決這個問題?