我正在使用
StepVerifier
来测试值:
@Test
public void testStuff() {
Thing thing = new Thing();
Mono<Thing> result = Mono.just(thing);
StepVerifier.create(result).consumeNextWith(r -> {
assertEquals(thing, r);
}).verifyComplete();
}
我现在想做的是测试 Mono 中是否缺少某个项目。像这样:
@Test
public void testNoStuff() {
Mono<Thing> result = Mono.empty();
StepVerifier.create(result)... // what goes here?
}
我想测试 Mono 是否确实是空的。我该怎么做?
只需使用
verifyComplete()
。如果 Mono
发出任何数据,它将使步骤验证器失败,因为此时它不需要 onNext
信号。
这里检查了onNext没有被调用
StepVerifier.create(result).expectNextCount(0).verifyComplete()
上面的答案表明可以使用这个:
StepVerifier.create(result).expectNextCount(0).verifyComplete()
但是,通过查看实现:
public DefaultStepVerifierBuilder<T> expectNextCount(long count) {
checkPositive(count);
if (count != 0) {
String desc = "expectNextCount(" + count + ")";
checkPotentialHang(count, desc);
this.script.add(new SignalCountEvent<>(count, desc));
}
return this;
}
当提供 0 作为参数时,它实际上不执行任何操作。
所以这给出了相同的结果:
StepVerifier.create(Flux.just()).expectNextCount(0).verifyComplete();
StepVerifier.create(Flux.just()).verifyComplete();
StepVerifier.create(Mono.empty()).expectNextCount(0).verifyComplete();
StepVerifier.create(Mono.empty()).verifyComplete();