在我的考试课上,我确实需要睡一段时间。这是涉及定期远程调用的集成测试。
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吗?
答案可能为时已晚,但有多种方法可以做到。
这告诉等待有 4 分钟的轮询延迟。因此,在进行断言之前请等待 4 分钟。
Awaitility.await().pollDelay(4, TimeUnit.MINUTES).untilAsserted(() -> Assert.assertTrue(true));
也很晚了,最新的Awaitility(4.2.0)还需要定义超时,它需要大于pollDelay。默认超时为 10 秒。因此,如果您等待的时间少于 10 秒,则无需定义超时。
所以,这对我有用:
Awaitility.await()
.timeout(66, SECONDS)
.pollDelay(65, SECONDS)
.untilAsserted(() -> Assertions.assertTrue(true));
在没有多线程的测试中工作,替换 Thread.sleep(x)。