如何使 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()
联系起来,以取消订阅并结束测试
以下是我的单元测试代码。我想测试生成无限事件并且不应预期事件完成的条件。我试图使 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()
联系起来,以取消订阅并结束测试