Java - Thread.sleep VS Awaitility.await()
Java - Thread.sleep VS Awaitility.await()
大家周五快乐,
我想将 Thread.sleep 替换为 Awaitility.await(),理想情况下更改最少,因为我要检查旧存储库中的 Sonar 错误。我试图避免使用 until
的 Awaitility,但没有成功。我知道 Awaitility 是针对异步行为的,而 until
函数是其中的重要组成部分。我希望对 Awaitility 有更多经验的人可以建议在此测试场景中干净地使用它,非常感谢您的意见。
//Thread.sleep(1000);
Awaitility.await().atMost(Duration.ONE_SECOND);
list = client.getLocation();
Assertions.assertFalse(list.isEmpty());
不管你的意图如何,我鼓励你再试一次 Awaitility 和 until()
。下面的例子在一个单行代码中测试了同样的事情(尽管为了提高可读性,它被写成几行):
@Test
void test_refresh() {
Awaitility
.await()
.atMost(5, TimeUnit.SECONDS)
.until(() -> {
List<Trp> trpList = client.getAllTrps();
return !trpList.isEmpty();
});
}
为了更精细地控制轮询,您可以查看 pollInterval() and pollDelay().
等方法
虽然乍一看您所做的是有道理的,但是随着对库设计的更好理解,您会忽略两个明显的原则。
Awaitility 库引入了函数式样式用法来定义属性、条件、累加器和转换。
1。终端操作。
Awaitility
.await()
.atMost(Duration.TWO_SECONDS)
上面的代码不会执行,因为在内部运行链的是对 Condition#await
的调用,它只能通过调用 ConditionFactory#until
.
来访问
This call to until
can be called a Terminal Operation
2。中间操作。
操作如await
、atMost
、timeout
和其他操作仅return ConditionFactory
的相同实例,它只会定义行为和动作以懒惰的方式。
简而言之,设计希望您:
- 使用
Awaitility#await
创建 ConditionFactory
的实例。
- 使用中间方法定义您的等待行为。
- 使用
until
及其变体执行 and/or 转换。
大家周五快乐,
我想将 Thread.sleep 替换为 Awaitility.await(),理想情况下更改最少,因为我要检查旧存储库中的 Sonar 错误。我试图避免使用 until
的 Awaitility,但没有成功。我知道 Awaitility 是针对异步行为的,而 until
函数是其中的重要组成部分。我希望对 Awaitility 有更多经验的人可以建议在此测试场景中干净地使用它,非常感谢您的意见。
//Thread.sleep(1000);
Awaitility.await().atMost(Duration.ONE_SECOND);
list = client.getLocation();
Assertions.assertFalse(list.isEmpty());
不管你的意图如何,我鼓励你再试一次 Awaitility 和 until()
。下面的例子在一个单行代码中测试了同样的事情(尽管为了提高可读性,它被写成几行):
@Test
void test_refresh() {
Awaitility
.await()
.atMost(5, TimeUnit.SECONDS)
.until(() -> {
List<Trp> trpList = client.getAllTrps();
return !trpList.isEmpty();
});
}
为了更精细地控制轮询,您可以查看 pollInterval() and pollDelay().
等方法虽然乍一看您所做的是有道理的,但是随着对库设计的更好理解,您会忽略两个明显的原则。
Awaitility 库引入了函数式样式用法来定义属性、条件、累加器和转换。
1。终端操作。
Awaitility
.await()
.atMost(Duration.TWO_SECONDS)
上面的代码不会执行,因为在内部运行链的是对 Condition#await
的调用,它只能通过调用 ConditionFactory#until
.
This call to
until
can be called aTerminal Operation
2。中间操作。
操作如await
、atMost
、timeout
和其他操作仅return ConditionFactory
的相同实例,它只会定义行为和动作以懒惰的方式。
简而言之,设计希望您:
- 使用
Awaitility#await
创建ConditionFactory
的实例。 - 使用中间方法定义您的等待行为。
- 使用
until
及其变体执行 and/or 转换。