超时测试不会返回TimeoutException - rxjava

时间:2018-02-27 11:49:22

标签: kotlin rx-java rx-java2

测试失败,因为没有抛出异常。它只是完成而不是超时。

    @Test
    fun timeout() {
        val testScheduler = TestScheduler()

        val sub = Observable.just(true)
                .filter{ it -> !it }
                .timeout(10, TimeUnit.SECONDS, testScheduler)

        val testSubscriber = sub.subscribeOn(testScheduler).test()

        testScheduler.advanceTimeBy(20, TimeUnit.SECONDS)
        testSubscriber.assertError(TimeoutException::class.java)
    }

我已经在这个街区待了一个多小时,我只是不明白它为什么会失败。它可能是非常明显的东西,但我觉得我需要另一组眼睛来指出它。

1 个答案:

答案 0 :(得分:1)

这是一个获得预期结果的测试:

@Test
fun timeout() {
    val testScheduler = TestScheduler()

    val sub = Observable.just(true) // 1
            .delaySubscription(Observable.never<Boolean>()) // 2
            .timeout(10, TimeUnit.SECONDS, testScheduler) // 3
    val testSubscriber = sub.subscribeOn(testScheduler).test()

    testScheduler.advanceTimeBy(20, TimeUnit.SECONDS)
    testSubscriber.assertError(TimeoutException::class.java)

以下是对正在发生的事情的解释:

  1. 我们只需要一个Observable开头,之前的过滤器只是让它变成空的
  2. 我们希望delay the subscription有一些不会完成的内容,因此一个替代方案是Observable而不是never发出
  3. 从现在开始,它和你一样