Flux.interval(Duration.ofSecon-6ren">
gpt4 book ai didi

Java Reactor StepVerifier.withVirtualTime 循环 : repeatedly check with "expectNoEvent()", "expectNext()"和 "thenAwait()"

转载 作者:行者123 更新时间:2023-12-05 06:22:39 25 4
gpt4 key购买 nike

我正在学习 Java 11 react 器。我看过这个例子:

    StepVerifier.withVirtualTime(() -> Flux.interval(Duration.ofSeconds(1)).take(3600))
.expectSubscription()
.expectNextCount(3600);

这个例子只是用 Flux<Long> 来检查每秒递增 1,直到 1 小时,最终计数为 3600。

但是,有没有办法每秒重复检查计数器?

我知道这个:

.expectNoEvent(Duration.ofSeconds(1))
.expectNext(0L)
.thenAwait(Duration.ofSeconds(1))

但我没有办法每秒重复检查一次,例如:

.expectNoEvent(Duration.ofSeconds(1))
.expectNext(i)
.thenAwait(Duration.ofSeconds(1))

i递增到 3600。有吗?


附言:我尝试添加 verifyComplete()最后在长时间运行的测试中,它永远不会结束。我一定要吗?还是忽略它?

最佳答案

您可以使用expectNextSequence 实现您想要的。您必须传递一个 Iterable 并包含您希望到达的每个元素。请参阅下面的示例:

var longRange = LongStream.range(0, 3600)
.boxed()
.collect(Collectors.toList());

StepVerifier
.withVirtualTime(() -> Flux.interval(Duration.ofSeconds(1)).take(3600))
.expectSubscription()
.thenAwait(Duration.ofHours(1))
.expectNextSequence(longRange)
.expectComplete().verify();

如果您不添加 verifyComplete()expectComplete().verify(),那么 JUnit 测试不会等到元素从 flux 到达,而只是终止。

要进一步引用,请参阅 verify() 的 JavaDoc:

this method will block until the stream has been terminated

关于Java Reactor StepVerifier.withVirtualTime 循环 : repeatedly check with "expectNoEvent()", "expectNext()"和 "thenAwait()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59029446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com