【问题标题】:How to perform assertion on all remaining elements in StepVerifier?如何对 StepVerifier 中的所有剩余元素执行断言?
【发布时间】:2017-06-26 15:06:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: java unit-testing project-reactor


    【解决方案1】:

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

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

    UPD Simon Baslé 建议只使用 thenConsume 时,它​​会重新抛出 AssertionErrors。

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

    在此任务中使用 StepVerifier 的更规范方法是:

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

    【讨论】:

      【解决方案2】:

      执行此操作的预期方法是实际使用thenConsumeWhile 运算符并提供谓词。如果序列中有任何元素不匹配,StepVerifier 将出错。

      虽然它不是基于断言的,但它采用Predicate 而不是Consumer。也就是说你仍然可以使用断言库,任何AssertionError 都应该无法通过测试(你仍然必须返回一个虚假的谓词结果)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多