gpt4 book ai didi

spring-webflux - 检索 StepVerifier 中的所有通量元素

转载 作者:行者123 更新时间:2023-12-03 16:53:26 29 4
gpt4 key购买 nike

我正在测试助焊剂。我不知道通量到底有多少元素。最初我尝试过 StepVerifier 并遇到了一些问题,因为我不知道这些元素。后来我提到了这个question并尝试了相同的方法,但出现以下错误:java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onNext
我的理解是,我的代码期待一个完整的信号,但通量还有一些剩余的元素(因此它给出 onNext() 而不是 onComplete())。请帮助我了解我遗漏的地方。下面是我的代码:

StepVerifier.create(flux)
.recordWith(ArrayList::new)
.consumeRecordedWith(elements-> {assertThat(elements.size()).isGreaterThan(0);})
.verifyComplete();

最佳答案

你实际上并没有消耗你的 Flux,你只是在设置它被消耗时会发生什么。您的 verifyComplete();然后调用失败,可以理解,因为 Flux 根本没有被消耗,因此它不完整!

您需要添加一个 thenConsumeWhile()调用以实际消耗它。

如果你真的需要使用AssertJ如上所述,您可以执行以下操作:

StepVerifier.create(flux)
.recordWith(ArrayList::new)
.thenConsumeWhile(x -> true)
.consumeRecordedWith(elements -> {
assertThat(elements.isEmpty()).isFalse();
})
.verifyComplete();

但是,不需要 AssertJ在这里 - reactor 测试包就足够了,并且添加额外的测试框架会使测试代码变得不那么清晰恕我直言。因此,如果您不喜欢 AssertJ,请执行以下操作:
StepVerifier.create(flux)
.recordWith(ArrayList::new)
.thenConsumeWhile(x -> true)
.expectRecordedMatches(elements -> !elements.isEmpty())
.verifyComplete();

请注意,在实际使用中,您可能希望调整 thenConsumeWhile 中的谓词。以便它也依次对每个元素进行检查。我还调整了上面的代码以使用 isEmpty()而不是检查 size()>0 ,因为它在实现相同目的的同时在语义上更清晰。

关于spring-webflux - 检索 StepVerifier 中的所有通量元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221204/

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