繁体   English   中英

如何对RxJava重试单元测试

[英]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)
    }

有谁知道我们可以对此进行测试吗? (未能找到太多有关测试的信息以确保ret​​ryWhen可以正常工作)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM