作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个方法从 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
观察到的源一样?
最佳答案
您的测试失败是因为 onCompleted()
在发出第二个项目时发生。文档说 debounce()
将在收到 onCompleted()
后立即发出最终项目。
要使您的测试正常进行,请连接一个 Observable.never()
,或将更多项添加到管道中。
这是关于 using debounce 的文章用于自动完成。
关于java - 在单元测试中去抖忽略超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612333/
我是一名优秀的程序员,十分优秀!