Jin*_*won 18 java multithreading thread-sleep awaitility
在我的考试课上,我确实需要睡一段时间。这是涉及定期远程调用的集成测试。
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.
}
Run Code Online (Sandbox Code Playgroud)
使用 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));
Run Code Online (Sandbox Code Playgroud)
似乎在默认轮询间隔之后就触发了超时。
在这种情况下,我不应该在第一次使用 Awaitillity 吗?
小智 26
答案可能为时已晚,但有多种方法可以做到。
这告诉等待性有 4 分钟的轮询延迟。因此,请等待 4 分钟后再进行断言。
Awaitility
.await()
.pollDelay(4, TimeUnit.MINUTES)
.untilAsserted(() -> Assert.assertTrue(true));
Run Code Online (Sandbox Code Playgroud)
也很晚了,最新的 Awaitility (4.2.0) 还需要定义超时,该超时需要大于 pollDelay。默认超时为 10 秒。因此,如果您等待的时间少于 10 秒,则无需定义超时。
所以,这对我有用:
Awaitility.await()
.timeout(66, SECONDS)
.pollDelay(65, SECONDS)
.untilAsserted(() -> Assertions.assertTrue(true));
Run Code Online (Sandbox Code Playgroud)
在没有多线程的测试中工作,替换 Thread.sleep(x)。
| 归档时间: |
|
| 查看次数: |
17137 次 |
| 最近记录: |