Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么StepVerifer虚拟时间对流量不起作用?_Java_Project Reactor - Fatal编程技术网

Java 为什么StepVerifer虚拟时间对流量不起作用?

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))

我一直在使用教程来学习反应堆,其中一个测试的结果让我有点困惑,我尝试使用StepVerifier进行虚拟时间

这非常有效:

@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内部