【问题标题】:How to fail a expectComplete() event and throw error?如何使 expectComplete() 事件失败并抛出错误?
【发布时间】:2026-01-04 20:45:01
【问题描述】:

以下是我的单元测试代码。我想测试一个条件,即生成无限事件并且不应期望事件完成。我试图让 expectComplete() 失败。

@Test
    public void testInfiniteEventGeneration() {
        Flux<Integer> flux = serv.myEvent();  // This method generates an infinite event.

    assertThatExceptionOfType(AssertionError.class)
    .isThrownBy(() -> StepVerifier.create(flux).
            expectNextCount(1).expectNextCount(2).expectNextCount(3)
                           .expectComplete()  

// eventComplete 应该会失败,因为事件是无限生成的。

  .verify())
    .withMessageEndingWith("Event should be infinite.");

}

需要帮助来实现它。还有其他更好的方法吗?

【问题讨论】:

    标签: project-reactor


    【解决方案1】:

    要测试一些Publisher 是无限的,理论上,您应该等待无限的持续时间并检查它是否没有完成。当然,你不能在测试套件中这样做。

    根据您的用例和您想要检查的行为,您可以:

    • 使用the virtual time feature 操纵时间并检查您的Publisher 是否在合理的持续时间内发送了大量值
    • 如果不应该发布任何事件,expectNoEvent(Duration) 可以检查
    • 在所有情况下,您都需要将您的期望与thenCancel() 联系起来以取消订阅并结束测试

    【讨论】:

      最近更新 更多