This article is crude.
I had set trampoline in RxJavaPlugins.set *** SchedulerHandler, but only setIoSchedulerHandler.
RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
I was writing a Test Rule like this,
RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
RxJavaPlugins.setComputationSchedulerHandler { Schedulers.trampoline() }
...
If the code under test has a buffer operator, the buffer operator internally uses the computation scheduler, so overwriting the trampoline scheduler will keep waiting indefinitely. The test never ends.
@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