我尝试使用虚拟调度程序测试Flux.bufferMillis
,但似乎间歇性失败。
以下是
StepVerifier.withVirtualTime(new Supplier() {
Flux get() {
return Flux.interval(1 second).take(5).bufferMillis(1500);
}}
)
.thenAwait(5 seconds)
.expectNext(...)
.verifyComplete();
我间歇性地得到的错误如下:
java.lang.AssertionError: expectation "expectNextMatches" failed (expected: onNext(); actual: onError(java.util.concurrent.RejectedExecutionException: Scheduler unavailable))
我不确定为什么Scheduler偶尔会无法使用。
答案 0 :(得分:0)
StepVerifier
和Supplier<Flux>
时, verify()
和虚拟时间大致相同:
StepVerifier
获取“虚拟时间调度程序”实例。SchedulerFactory
替换为将虚拟时间调度程序返回给需要默认调度程序的所有运算符。这是并行运行测试时可能出现问题的地方:由于只有1个工厂,并且由于获得VTS的方式,进行2次并行虚拟时间测试可能导致使用相同的VirtualTimeScheduler
实例在后台。因此,第一个测试将关闭调度程序,第二个测试将是REJECTED
。
自gradle-scalatest
runs in parallel by default以来,这很可能是您问题的根源。