Java 为什么StepVerifer虚拟时间对流量不起作用?
我一直在使用教程来学习反应堆,其中一个测试的结果让我有点困惑,我尝试使用StepVerifier进行虚拟时间 这非常有效:Java 为什么StepVerifer虚拟时间对流量不起作用?,java,project-reactor,Java,Project Reactor,我一直在使用教程来学习反应堆,其中一个测试的结果让我有点困惑,我尝试使用StepVerifier进行虚拟时间 这非常有效: @Test public void expect10Elements() { StepVerifier.withVirtualTime(() -> Flux.interval(Duration.ofSeconds(1)).take(10)) .thenAwait(Duration.ofSeconds(10))
@Test
public void expect10Elements() {
StepVerifier.withVirtualTime(() -> Flux.interval(Duration.ofSeconds(1)).take(10))
.thenAwait(Duration.ofSeconds(10))
.expectNextCount(10)
.expectComplete()
.verify();
}
但这行不通
@Test
public void expect10Elements() {
Flux<Long> flux = Flux.interval(Duration.ofSeconds(1)).take(10);
StepVerifier.withVirtualTime(() -> flux)
.thenAwait(Duration.ofSeconds(10))
.expectNextCount(10)
.expectComplete()
.verify();
}
@测试
公共元素(){
通量通量=通量间隔(持续时间秒(1))。取(10);
带有虚拟时间(()->流量)的步进验证器
.然后等待(持续时间秒(10))
.expectNextCount(10)
.expectComplete()
.verify();
}
我不太明白,如果我在发布之前没有订阅通量,为什么会发生这种情况。有人能帮忙吗?这是因为虚拟时间的实现方式 有关说明,请参见: 此虚拟时间功能插入到反应器中的自定义调度程序中 调度程序工厂。由于这些定时运算符通常使用 默认Schedulers.parallel()调度程序,将其替换为 VirtualTimeScheduler完成了这个任务。然而,一个重要的 先决条件是在虚拟操作之后实例化运算符 时间计划程序已激活 为了增加正确发生这种情况的机会,步骤验证程序 不以简单的通量作为输入。使用虚拟时间需要一段时间 供应商,这将引导您惰性地创建 完成调度程序设置后测试流量 要格外小心,确保
供应商
可用于
懒散的时尚。否则,不能保证虚拟时间<特别是
避免在测试代码的前面实例化通量,并使用
供应商返回该变量。相反,总是实例化通量
在lambda内部