如何在StepVerifier中对所有剩余元素执行断言?

时间:2017-06-26 15:06:40

标签: java unit-testing project-reactor

StepVerifier有一个assertNext方法,允许对下一个元素的值执行断言。

    StepVerifier.create(dataFlux)
            .assertNext(v -> checkValue(v)
            .verifyComplete();

对每个剩余元素执行断言的好方法是什么(例如,检查每个元素是否为正)?我期待类似assertEveryNextElement方法的内容。

2 个答案:

答案 0 :(得分:3)

我首次尝试对通量的所有元素执行断言

StepVerifier.create(dataFlux)
        .recordWith(ArrayList::new)
        .thenConsumeWhile(x -> true)  // Predicate on elements
        .consumeRecordedWith(matches ->
            matches.forEach(v -> checkValue(v)))
        .verifyComplete();

UPD SimonBaslé建议只使用thenConsumeWhile,它会重新抛出AssertionErrors。

StepVerifier.create(dataFlux)
        .thenConsumeWhile(v -> {
            assertThat(v).equalsTo(expected);
            return true;
        })
        .verifyComplete();

使用StepVerifier执行此任务的更多规范方法是:

StepVerifier.create(dataFlux)
        .thenConsumeWhile(v -> return expected.equals(v))
        .verifyComplete();

答案 1 :(得分:1)

实现这一目标的预期方法是实际使用thenConsumeWhile运算符并提供谓词。如果序列中的任何元素不匹配,StepVerifier将会出错。

它不是基于断言的,而是Predicate而不是Consumer。那说你仍然可以使用一个断言库,任何AssertionError都应该通过测试失败(你仍然需要返回一个伪造的谓词结果)。

(侧面警告:请记住,这对于无限序列不起作用)