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

2022-09-04 07:22:38

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

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

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


答案 1

我第一次尝试对通量的所有元素进行断言是

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

断续器Simon Baslé建议使用当时的Consume虽然,但它会重新抛出AssersisErors。

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

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

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

答案 2

预期的方法是实际使用运算符并提供谓词。如果序列中有任何元素不匹配,则 will 出错。thenConsumeWhileStepVerifier

它不是基于断言的,而是采用 a 而不是 .也就是说,您仍然可以使用断言库,任何都应该未通过测试(您仍然必须返回虚假的谓词结果)。PredicateConsumerAssertionError

(侧面警告:请记住,这在无限序列中效果不佳)


推荐