Cet article est grossier.
J'avais mis trampoline dans RxJavaPlugins.set *** SchedulerHandler, mais seulement setIoSchedulerHandler.
RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
J'écrivais une règle de test comme celle-ci,
RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
RxJavaPlugins.setComputationSchedulerHandler { Schedulers.trampoline() }
...
Si le code sous test a un opérateur buffer, l'opérateur de tampon utilise en interne le planificateur de calcul, donc écraser le planificateur trampoline vous fera attendre indéfiniment. Le test ne se termine jamais.
@Test
fun testBuffer() {
val subject = PublishSubject.create<Int>()
val testObserver = subject
.buffer(1, TimeUnit.SECONDS)
.filter { it.isNotEmpty() }
.test()
subject.onNext(1)
subject.onNext(2)
testObserver.await(2, TimeUnit.SECONDS)
testObserver.assertValues(listOf(1, 2))
}
Recommended Posts