如何使用 Awaitility 等待至少指定的时间?

问题描述 投票:0回答:2

在我的考试课上,我确实需要睡一段时间。这是涉及定期远程调用的集成测试。

for (int i = 0; i < 16; i++) {
    // sleep some... should sleep some...
    Thread.sleep((int) TimeUnit.MINUTES.toMillis(4L)); // means as it means.
    // call remote api and check the response.
}

使用 Awaitility 的等效表达式是什么?

我尝试过...

// Let's sleep for 4 minutes, no matter what happen!
Awaitility.await()
        .atLeast(Duration.ofMinutes(4L)) // what the hell does this mean, anyway?
        .untilTrue(new AtomicBoolean(false));

似乎在默认轮询间隔之后就触发了超时。

在这种情况下我不应该第一次使用Awaitillity吗?

java multithreading thread-sleep awaitility
2个回答
23
投票

答案可能为时已晚,但有多种方法可以做到。

这告诉等待有 4 分钟的轮询延迟。因此,在进行断言之前请等待 4 分钟。

Awaitility.await().pollDelay(4, TimeUnit.MINUTES).untilAsserted(() -> Assert.assertTrue(true));

5
投票

也很晚了,最新的Awaitility(4.2.0)还需要定义超时,它需要大于pollDelay。默认超时为 10 秒。因此,如果您等待的时间少于 10 秒,则无需定义超时。

所以,这对我有用:

Awaitility.await()
  .timeout(66, SECONDS)
  .pollDelay(65, SECONDS)
  .untilAsserted(() -> Assertions.assertTrue(true));

在没有多线程的测试中工作,替换 Thread.sleep(x)。

© www.soinside.com 2019 - 2024. All rights reserved.