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

问题描述 投票:-1回答:1

以下是我的单元测试代码。我想测试生成无限事件并且不应该期望事件完成的条件。我试图使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应该失败,因为事件是在ininteintely中生成的。

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

}

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

project-reactor
1个回答
0
投票

为了测试一些Publisher是无限的,理论上,你应该等待无限期并检查它是否完成。当然,你不能在测试套件中这样做。

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

  • 使用the virtual time feature操纵时间并检查你的Publisher是否在合理的持续时间内发送了大量值
  • 如果不发布任何事件,expectNoEvent(Duration)可以检查
  • 在所有情况下,您都需要使用thenCancel()链接您的期望以取消订阅并结束测试
© www.soinside.com 2019 - 2024. All rights reserved.