gpt4 book ai didi

java - 在单元测试中去抖忽略超时

转载 作者:行者123 更新时间:2023-11-30 00:19:16 25 4
gpt4 key购买 nike

我有这个方法从 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();

我试过传递 TestSchedulerdebounce运算符并将默认计算调度程序设置为 TestScheduler通过RxJavaPlugins但结果没有改变,测试仍然失败。

如果测试失败则意味着 debounce运算符直接通过它发送事件,而忽略在它的参数中传递的超时。我不知道这是否正确,但据我所知。所以,我的问题是如何修复此测试并控制来自 debounce 的事件运算符就像我正在使用 TestSchedulers 观察到的源一样?

最佳答案

您的测试失败是因为 onCompleted() 在发出第二个项目时发生。文档说 debounce() 将在收到 onCompleted() 后立即发出最终项目。

要使您的测试正常进行,请连接一个 Observable.never(),或将更多项添加到管道中。

这是关于 using debounce 的文章用于自动完成。

关于java - 在单元测试中去抖忽略超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com