我有一个非常简单的函数,可以延迟给定的值:
Flowable.defer<Effect> { Flowable.just(Effect.Success) as Publisher<out Effect> }
.delay(2, TimeUnit.SECONDS)
.subscribeOn(computationScheduler)
.observeOn(mainScheduler)
我尝试像这样来测试它在CalculationScheduler中提前时间:
private val mainScheduler = Schedulers.trampoline()
private val computationScheduler = TestScheduler()
@Test
fun solve() {
val testObserver = actor.invoke(Action.Solve).test()
computationScheduler.advanceTimeBy(3, TimeUnit.SECONDS)
testObserver.assertValues(Effect.Success)
}
没有延迟,这是可行的,但似乎我无法设法适当地延长时间。
在此先感谢您的帮助
最佳答案
根据您调用的delay方法的javadocs:
由于延迟方法使用的计算调度程序与您预订的调度程序不同,因此您的代码无法正常工作。
为了解决这个问题,您必须将TestScheduler computationScheduler
传递给delay方法:
Flowable.defer<Effect> { Flowable.just(Effect.Success) as Publisher<out Effect> }
.delay(2, TimeUnit.SECONDS, computationScheduler)
...
或设置rxjava库的计算调度程序处理程序:
RxJavaPlugins.setComputationSchedulerHandler { computationScheduler }