当没有 activity 时,是否可以选择在测试早期失败?

Is there an option to fail early in tests when there is no activity?

使用 Vert.xJUnit5 的简单集成测试可能类似于以下代码块。

@Test
@Timeout(value = 10, timeUnit = TimeUnit.SECONDS)
void some_test(Vertx vertx, VertxTestContext testContext) {
  // do nothing in this example.
}

这个简单的测试将等待 10 秒,然后由于超时而失败。我想知道是否有一个选项可以让这个测试提前失败而不等待超时。由于没有 activity,Vert.x 可以推断测试如果尚未完成则永远不会完成。对于 no activity,我的意思是没有 运行 任务或计时器。只有外部操作才能导致进一步的操作,但我想很多测试都没有这样的外部触发器。

我想知道 Vert.x 是否提供了说 "There are no external triggers. Just stop when there is nothing left to do."[=12= 的可能性]

Vert.x 是反应性的,这意味着您的实现会对其他参与者通过事件总线发送的事件做出反应。

通常情况下,您唯一能做的就是监听事件总线。您的实施无法确定不存在外部事件是否是某种错误。如果其他演员无话可说,这可以是一个非错误的条件。

要确定是否没有外部触发因素并在无事可做的情况下提前通过测试,只能通过了解所有其他参与者的内部状态来完成。

有人可能会争辩说这不是单元测试的任务,因为可以认为其他参与者不属于您的单元。

一个解决方案的建议

你的所有其他参与者(即 Verticles)可以在某一时刻发出一个事件,通知你的测试实现,他们已经完成了他们的工作,没有什么可做的。

您的测试可以计算那些 finished 事件,并在收到所有 finished[=30] 后立即通过调用 testContext.completeNow(); 相应地自行执行=] 事件。

据我所知,vert.x-toolkit 或 junit 中没有选项或工具可以为您完成这项工作。您必须自己实施。