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

16
在我的测试课程中,我真的需要睡一段时间。这是一个涉及定期远程调用的集成测试。
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吗?
2个回答

24
可能回答晚了,但有几种方法可以做到这一点。
这告诉awaitility在进行断言之前等待4分钟的轮询延迟。所以,在进行断言之前等待4分钟。
Awaitility
    .await()
    .pollDelay(4, TimeUnit.MINUTES)
    .untilAsserted(() -> Assert.assertTrue(true));

5
也相当晚,最新的Awaitility(4.2.0)还需要定义一个超时时间,该时间需要大于轮询延迟。默认超时时间为10秒。因此,如果等待时间少于10秒,则不需要定义超时。
所以,这对我来说是有效的:
Awaitility.await()
  .timeout(66, SECONDS)
  .pollDelay(65, SECONDS)
  .untilAsserted(() -> Assertions.assertTrue(true));

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接