如何使用Reactor的StepVerifier来验证Mono是否为空?

问题描述 投票:0回答:3

我正在使用

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 是否确实是空的。我该怎么做?

java unit-testing reactive-programming project-reactor
3个回答
88
投票

只需使用

verifyComplete()
。如果
Mono
发出任何数据,它将使步骤验证器失败,因为此时它不需要
onNext
信号。


18
投票

这里检查了onNext没有被调用

 StepVerifier.create(result).expectNextCount(0).verifyComplete()

0
投票

上面的答案表明可以使用这个:

 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();
© www.soinside.com 2019 - 2024. All rights reserved.