如何与 StepVerify 程序验证提供的 Mono 未完成?



有了StepVerifier很容易检查提供的Mono是否已经完成(只需通过StepVerifier中的expectComplete()方法(,但是如果需要检查相反的情况,我该怎么办?

我尝试使用这种方法:

@Test
public void neverMonoTest() {
Mono<String> neverMono = Mono.never();
StepVerifier.create(neverMono)
.expectSubscription()
.expectNoEvent(Duration.ofSeconds(1))
.thenCancel()
.verify();
}

和这样的测试通过。但这是误报,因为当我用Mono.empty()替换Mono.never()时,测试仍然是绿色的。

有没有更好和可靠的方法来检查Mono的完成不足(当然在给定的时间范围内(?

看起来你在反应堆测试中遇到了一个错误,不幸的是,这个错误看起来不会很快得到解决:

由于我的记忆,这是反应堆测试设计中的一个持续缺陷。一旦反应堆测试从头开始重写/显着重写,很可能会修复此问题。

降级到 3.1.2 似乎可以解决问题,但这是一个相当大的降级。我知道的唯一其他解决方法是 PyvesB 在此处发布的,涉及等待 Mono 超时:

Mono<String> mono = Mono.never();
StepVerifier.create(mono.timeout(Duration.ofSeconds(1L)))
.verifyError(TimeoutException.class);

当下一个版本推出时,您应该能够执行以下操作:

Mono<String> mono = Mono.never();
StepVerifier.create(mono)
.expectTimeout(Duration.ofSeconds(1));

。作为更简洁的替代方案。

最新更新