在我的考试课上,我确实需要睡一段时间。这是涉及定期远程调用的集成测试。
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 吗?
有没有办法使用 Awaitility 来断言没有任何改变?我想验证某个主题是否未被写入,但由于没有状态更改,Awaitility 不喜欢这样。例如,这段代码给出了以下错误。谢谢
@Test
fun waitUntilListMightBePopulated() {
val myTopic: List<String> = emptyList()
await.atLeast(2, TimeUnit.SECONDS).pollDelay(Duration.ONE_SECOND).until {
myTopic.isEmpty()
}
}
Run Code Online (Sandbox Code Playgroud)
ConditionTimeoutException: Condition was evaluated in 1005478005 NANOSECONDS which is earlier than expected minimum timeout 2 SECONDS
Run Code Online (Sandbox Code Playgroud) 我想替换Thread.sleep为Awaitility.await(),最好进行最小的更改,因为我正在检查旧存储库中的声纳错误。我试图避免使用untilAwaitility,但它没有成功。我知道 Awaitility 是针对异步行为的,而until函数是其中的重要组成部分。我希望对 Awaitility 有更多经验的人可以建议在这个测试场景中干净地使用它,非常感谢您的意见。
//Thread.sleep(1000);
Awaitility.await().atMost(Duration.ONE_SECOND);
list = client.getLocation();
Assertions.assertFalse(list.isEmpty());
Run Code Online (Sandbox Code Playgroud) 我有一些使用 Awaitility 库(https://mvnrepository.com/artifact/org.awaitility/awaitility/4.0.2)的功能测试,我需要的是用它运行一些代码,并在以下情况下执行一些操作条件失败,直到成功,或者时间超过 Awaitility 条件的限制。
到目前为止我有这个:
Awaitility.await().atMost(10, SECONDS).until(() -> {
try {
some code...
some assertions...
return true;
} catch (Throwable throwable) {
throwable.printStackTrace();
some more code...
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
如果超过 10 秒限制,此条件失败,我得到的结果是:
org.awaitility.core.ConditionTimeoutException: Condition with lambda expression in myproject.class was not fulfilled within 10 seconds.
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能显示导致 Awaitility 条件未成功的真实代码异常,同时还具有在代码失败时运行某些代码的功能呢?
先感谢您。
我的代码调用服务器并获取old-response.
然后我想轮询直到我从服务器(又名new-response)得到不同的响应。
II 使用 while 循环我可以保存new-response并在轮询后使用它。
如果我使用我awaitility怎样才能new-response轻松获得?
这是我的代码:
public Version waitForNewConfig() throws Exception {
Version oldVersion = deploymentClient.getCurrentConfigVersion(appName);
await().atMost(1, MINUTES).pollInterval(5, SECONDS).until(newVersionIsReady(oldVersion));
Version newVersion = deploymentClient.getCurrentConfigVersion(appName);
}
private Callable<Boolean> newVersionIsReady(Version oldVersion) {
return new Callable<Boolean>() {
public Boolean call() throws Exception {
Version newVersion = deploymentClient.getCurrentConfigVersion(appName);
return !oldVersion.equals(newVersion);
}
};
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 java 中的 Awaitility 包为我的集成测试编写一个场景。
我有一个电话如下:
System.out.println(...)
await().atMost(10,Duration.SECONDS).until(myFunction());
and some code here....
Run Code Online (Sandbox Code Playgroud)
在这里,它等待 10 秒,直到 myFunction() 被调用。
我想要这样的东西,我的要求是:它应该每秒持续调用 myFunction() ,持续时间为 10 秒。对此有更好的方法吗?