我有這樣的方法來從API防抖動單位無視超時測試
public void fetchSearchResults(Observable<String> searchObservable) {
searchObservable
.filter(search -> !TextUtils.isEmpty(search))
.debounce(700, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(search -> getView().showLoader)
.switchMap(search -> apiService.fetchSearchResults(search)) //Api call is executed on an io scheduler
.subscribe(consumer, errorConsumer);
}
搜索結果和我寫了這個JUnit測試了這種方法:
@Test
public void fetchSearchResultsTest() {
TestScheduler testScheduler = new TestScheduler();
Observable<String> nameObservable = Observable.just("","FA")
.concatMap(search -> Observable.just(search).delay(100,
TimeUnit.MILLISECONDS, testScheduler));
testScheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS);
verify(view, never()).showLoader();
testScheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS);
verify(view, never()).showLoader();
}
但在最後的測試失敗verify
聲明與訊息
org.mockito.exceptions.verification.NeverWantedButInvoked
view.showLoader();
我試圖傳遞一個TestScheduler
到debounce
操作和設置默認計算調度爲TestScheduler
通過RxJavaPlugins
但結果並沒有改變,測試仍然失敗。
如果測試失敗,那麼這將意味着debounce
運算符正在通過它發送事件,忽略它傳遞給它的參數的超時。我不知道這是否正確,但這是我所瞭解的。所以,我的問題是我如何修復這個測試並控制debounce
運算符的事件,比如我使用TestSchedulers
的源觀察值?
什麼是TestScheduler類? – dazza5000