Ant*_*Raj 8 project-reactor spring-webflux
我正在测试助焊剂。我不知道通量到底有多少元素。最初我尝试过 StepVerifier 并遇到了一些问题,因为我不知道这些元素。后来我提到了这个问题并尝试了同样的方法,但出现以下错误:
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();
Run Code Online (Sandbox Code Playgroud)
Mic*_*rry 13
你实际上并没有消耗你的 Flux,你只是在设置它被消耗时会发生什么。你的verifyComplete();
调用失败了,这是可以理解的,因为 Flux 根本没有被消耗掉,因此它不完整!
您需要添加一个thenConsumeWhile()
调用来实际使用它。
如果你真的需要AssertJ
像上面那样使用,那么你可以这样做:
StepVerifier.create(flux)
.recordWith(ArrayList::new)
.thenConsumeWhile(x -> true)
.consumeRecordedWith(elements -> {
assertThat(elements.isEmpty()).isFalse();
})
.verifyComplete();
Run Code Online (Sandbox Code Playgroud)
但是,这里没有必要AssertJ
- 反应器测试包就足够了,并且添加额外的测试框架会使测试代码变得不那么清晰恕我直言。因此,如果您不喜欢 AssertJ,请执行以下操作:
StepVerifier.create(flux)
.recordWith(ArrayList::new)
.thenConsumeWhile(x -> true)
.expectRecordedMatches(elements -> !elements.isEmpty())
.verifyComplete();
Run Code Online (Sandbox Code Playgroud)
请注意,在实际使用中,您可能希望调整谓词,thenConsumeWhile
以便它也依次对每个元素进行检查。我还调整了上面的代码以使用isEmpty()
而不是检查 if size()>0
,因为它在实现相同目的的同时在语义上更清晰。
归档时间: |
|
查看次数: |
2764 次 |
最近记录: |