[英]How to unit test RxJava retryWhen
我正在尝试对RxJava Completable使用指数补偿,并且在尝试时代码可以正常工作。 因此,试图添加一个单元测试来覆盖它,但是不确定如何测试retryWhen
部分。
fun makeCall(
scheduler: Scheduler = scheduler.io()
) : Completable {
val value = "myString"
return myCompletable(value)
.retryWhen { errors: Flowable<Throwable> ->
errors
.zipWith(Flowable.range(1, 3))
.flatMap { errorRetryPair: Pair<Throwable, Int> ->
Flowable.timer(2.toDouble().pow(errorRetryPair.second.toDouble()).toLong(), TimeUnit.SECONDS)
}
}.subscribeOn(scheduler)
}
有谁知道我们可以对此进行测试吗? (未能找到太多有关测试的信息以确保retryWhen可以正常工作)
TIA
最好使用TestScheduler
对RxJava定时操作进行单元测试。
// in your test code
simulateFailure();
long firstStepMs = 2_000; // first backoff time in ms
long epsilon = 40; // 10ms is too small
scheduler.advanceTimeBy( firstStepMs - epsilon, TimeUnit.MILLISECONDS );
// test to see that resubscription has NOT occurred
scheduler.advanceTimeBy( 2 * epsilon, TimeUnit.MILLISECONDS );
// test to see that first resubscription HAS occurred
并重复不同的退避时间。 提前时钟的粒度取决于您。 由于Java中的计时器调度方式, epsilon
必须大于10毫秒; 您当然将无法有效地测量任何较短的时间间隔。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.