Awaitility同步异步工具怎么使用
本篇内容主要讲解“Awaitility同步异步工具怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Awaitility同步异步工具怎么使用”吧!
1. awaitility入门
Maven:
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>xxxx</version>
<scope>test</scope>
</dependency>
1.1 静态导入
为了有效地使用Awaitility,建议从Awaitility框架中静态地导入以下方法:
org.awaitility.Awaitility.*
在使用的时候需要搭配Java的时间相关的类以及Junit相关类:
java.time.Duration.*
java.util.concurrent.TimeUnit.*
org.junit.Assert.*
1.2 简单例子
例子1:
await().until(newUserIsAdded());
等待直到执行newUserIsAdded()返回true. 这个是没有返回值的。
例子2:
await().atMost(5, SECONDS).until(newUserWasAdded());
最多等待5秒,等待直到执行newUserIsAdded()返回true. 这个是没有返回值的。
例子3:
await().until( userRepositorySize(), equalTo(1) );
等待直到执行userRepositorySize()返回方法对应的值. 这个是有返回值
2. awaitility在RocketMQ中的实战
在RocketMQ的test cases 中有一些使用了 Thread.sleep,接下来我们看看如何使用awaitility进行优化,减少测试用例的执行时间。以ControllerManagerTest测试用例为例子来解决,在代码中可以看到有这样的代码:
上图框出来的代码主要的作用是什么呢?等待Broker的Master过期,但是过期的时间我们根据设置的心跳的过期时间来预估时间。所以这里填写的是6秒当然你也可以填写10秒或者更长。
解决之前的执行时间:
使用awaitility对代码进行改造重构:
重构后的代码,如上图的红线框出来部分。当然我这里还对其他的进行处理。
使用awaitility重构后的执行时间:
时间有明显的下降。相比之前的下降了5秒左右。
相关文章