我要对我的retryWhen块进行测试。当使用模拟器进行测试时,它可以正常工作。我还有一个检查重试是否通过的测试。然而,有时我的测试会失败。我试过使用Scheduler.immediate。然而,这也会导致测试失败。
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())
}测试:
fun getListOfItem_Retry {
val objectUnderTest = item[2]
val testSubscriber : AssertableSubscriber<Item> = actions.getItem(objectUnderTest.id).test()
testSubscriber.awaitTerminalEvent()
testSubscriber.assertNoErrors();
assertTrue(getCalls == 2)
}在设置中,我有
RxJavaHooks.reset()
RxJavaHooks.setOnIOScheduler({ _ -> Schedulers.immediate()})和拆卸,我有:
RxJavaHooks.reset()当我移除钩子时,它就通过了。但是,测试偶尔会失败。怎样才能使测试稳定?
另外,我得到了一个看不到的发出的NoSuchElementException
发布于 2018-03-12 18:16:44
看起来您实际上想要实现一个后备机制,以防第一个源失败。您可以只使用onErrorResumeNext
getItemHelper(id)
.onErrorResumeNext({ error ->
if (error is NotFoundException) {
return getItemFromServer(id)
}
return Single.error(error)
})
.subscribeOn(Schedulers.io())
.test()
.awaitTerminalEvent()
.assertNoErrors()https://stackoverflow.com/questions/49222916
复制相似问题