如何使 expectComplete() 事件失败并抛出错误?

How to fail a expectComplete() event and throw error?

以下是我的单元测试代码。我想测试生成无限事件并且不应预期事件完成的条件。我试图使 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.");

}

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

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

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

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