Kotlin 超时测试不返回TimeoutException-rxjava
测试失败,因为没有引发异常。它只是完成,而不是超时Kotlin 超时测试不返回TimeoutException-rxjava,kotlin,rx-java,rx-java2,Kotlin,Rx Java,Rx Java2,测试失败,因为没有引发异常。它只是完成,而不是超时 @Test fun timeout() { val testScheduler = TestScheduler() val sub = Observable.just(true) .filter{ it -> !it } .timeout(10, TimeUnit.SECONDS, testScheduler)
@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)
}
我在这个街区已经呆了一个多小时了,我不明白为什么会失败。这可能是非常明显的事情,但我觉得我需要另一双眼睛来为我指出这一点。这里有一个测试可以得到预期的结果:
@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)
@测试
乐趣超时(){
val testScheduler=testScheduler()
val sub=可观察的。刚好(真)//1
.delaySubscription(Observable.never())//2
.timeout(10,TimeUnit.SECONDS,testScheduler)//3
val testSubscriber=sub.subscribeeon(testScheduler.test())
testScheduler.advanceTimeBy(20,时间单位。秒)
testSubscriber.assertError(TimeoutException::class.java)
下面是对发生的事情的解释:
可观察的
,开始时,您之前使用的过滤器只是将此设置为空可观察的
,而不是从不
发出的just
是一个有限的源代码,序列完成时没有任何项目,没有延迟。您试图完成什么?啊,当然……我想您可以将其更改为observatable.fromCallable(()->{return true;})
,它将按预期运行。just
是一个阻塞调用。@Tuby这完全错误。@TubyfromCallable
仍然是有限的,但是OP试图复制一个热的、非终止的Observable
。而且just
不是阻塞的,而是同步的。+1“因此,一个替代方案是可观测的而不是从不发射”。在我的测试中,原始可观测的仍在发射有效的onNext()
,因此如果提前时间,成功的发射将在timeout()
有机会发送异常之前发送。