测试 RxJava:AdvanceTime 不能在简单的延迟流动中工作
Testing RxJava: AdvanceTime not working in simple deferred flowable
我有一个非常简单的函数,它以给定的延迟延迟一个值:
Flowable.defer<Effect> { Flowable.just(Effect.Success) as Publisher<out Effect> }
.delay(2, TimeUnit.SECONDS)
.subscribeOn(computationScheduler)
.observeOn(mainScheduler)
我尝试像这样在 computationScheduler 中提前测试它:
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)
}
没有延迟,这就可以了,但我似乎无法适当地提前时间。
预先感谢您的帮助
根据您调用的延迟方法的 javadoc:
This version of {@code delay} operates by default on the {@code
computation} {@link Scheduler}.
所以您的代码无法正常工作,因为延迟方法使用的计算调度程序与您订阅的调度程序不同。
为了修复它,您必须将 TestScheduler computationScheduler
传递给延迟方法:
Flowable.defer<Effect> { Flowable.just(Effect.Success) as Publisher<out Effect> }
.delay(2, TimeUnit.SECONDS, computationScheduler)
...
或设置 rxjava 库的计算调度程序处理程序:
RxJavaPlugins.setComputationSchedulerHandler { computationScheduler }
我有一个非常简单的函数,它以给定的延迟延迟一个值:
Flowable.defer<Effect> { Flowable.just(Effect.Success) as Publisher<out Effect> }
.delay(2, TimeUnit.SECONDS)
.subscribeOn(computationScheduler)
.observeOn(mainScheduler)
我尝试像这样在 computationScheduler 中提前测试它:
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)
}
没有延迟,这就可以了,但我似乎无法适当地提前时间。 预先感谢您的帮助
根据您调用的延迟方法的 javadoc:
This version of {@code delay} operates by default on the {@code computation} {@link Scheduler}.
所以您的代码无法正常工作,因为延迟方法使用的计算调度程序与您订阅的调度程序不同。
为了修复它,您必须将 TestScheduler computationScheduler
传递给延迟方法:
Flowable.defer<Effect> { Flowable.just(Effect.Success) as Publisher<out Effect> }
.delay(2, TimeUnit.SECONDS, computationScheduler)
...
或设置 rxjava 库的计算调度程序处理程序:
RxJavaPlugins.setComputationSchedulerHandler { computationScheduler }