首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试RetryWhen

如何测试RetryWhen
EN

Stack Overflow用户
提问于 2018-03-12 01:24:51
回答 1查看 1K关注 0票数 0

我要对我的retryWhen块进行测试。当使用模拟器进行测试时,它可以正常工作。我还有一个检查重试是否通过的测试。然而,有时我的测试会失败。我试过使用Scheduler.immediate。然而,这也会导致测试失败。

代码语言:javascript
复制
open fun getItem(id: String): Single<Item> {
    return getItemHelper(id)
            .retryWhen { errors ->
                errors.take(1)
                        .filter { it is NotFoundException }
                        .flatMap { _ ->
                            getItemFromServer(id)
                                    .andThen(Observable.just(true))
                        }
            }.subscribeOn(Schedulers.io())
}

测试:

代码语言:javascript
复制
fun getListOfItem_Retry {
    val objectUnderTest = item[2]
    val testSubscriber : AssertableSubscriber<Item> = actions.getItem(objectUnderTest.id).test()
    testSubscriber.awaitTerminalEvent()

    testSubscriber.assertNoErrors();
    assertTrue(getCalls == 2)
}

在设置中,我有

代码语言:javascript
复制
RxJavaHooks.reset()
RxJavaHooks.setOnIOScheduler({ _ -> Schedulers.immediate()})

和拆卸,我有:

代码语言:javascript
复制
RxJavaHooks.reset()

当我移除钩子时,它就通过了。但是,测试偶尔会失败。怎样才能使测试稳定?

另外,我得到了一个看不到的发出的NoSuchElementException

EN

回答 1

Stack Overflow用户

发布于 2018-03-12 18:16:44

看起来您实际上想要实现一个后备机制,以防第一个源失败。您可以只使用onErrorResumeNext

代码语言:javascript
复制
getItemHelper(id)
.onErrorResumeNext({ error -> 
    if (error is NotFoundException) {
        return getItemFromServer(id)
    }
    return Single.error(error)
})
.subscribeOn(Schedulers.io())
.test()
.awaitTerminalEvent()
.assertNoErrors()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49222916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档