AssertJ提供了流式调用的Java断言语句,主要就是简化了断言语句的写法,改善了断言的可读性。
- 提供了丰富的断言特性
- 更有意义的错误消息
- 提升了测试代码可读性
使用
1 引入依赖包:
- AssertJ 3.x需要Java8以上版本。3.x包含所有2.x的特性,并且增加了一些Java8的语法支持
- AssertJ 2.x需要Java7以上版本
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<!-- use 2.9.1 for Java 7 projects -->
<version>3.14.0</version>
<scope>test</scope>
</dependency>
testCompile("org.assertj:assertj-core:3.14.0")
2 如果不使用AssertJ时的断言写法,就是会多写几行。
assertEquals(actual, expected);
assertNotNull(list);
assertTrue(list.isEmpty());
HashMap<Object, Object> map = new HashMap<>();
map.put("orgId",123);
map.put("operator",0);
assertThat(map, hasKey("orgId"));
assertThat(map, hasValue(123));
3 使用AssertJ时候的写法。
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class AssertJDemo {
static class Person{
public Person(String name) {
this.name = name;
}
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Test
public void assertBasic(){
Person frodo = new Person("Frodo");
Person sauron = new Person("sauron");
assertThat(frodo.getName()).isEqualTo("Frodo");
assertThat(frodo).isNotEqualTo(sauron);
// 链式调用
assertThat(frodo.getName()).startsWith("Fro")
.endsWith("do")
.isEqualToIgnoringCase("frodo");
List<Person> personList = Arrays.asList(frodo, sauron);
// 集合的链式调用
assertThat(personList).hasSize(2)
.contains(frodo, sauron)
.doesNotContain(new Person("sam"));
//as() 用来显示错误消息
frodo.setAge(30);
assertThat( frodo.getAge() ).as("%s 's age",frodo.getName()).isEqualTo(33);
}
}
比较日期
@Test
public void assertDate(){
Date time = Calendar.getInstance().getTime();
assertThat(time).isBefore(new Date());
}
比较文件
@Test
public void assertFile(){
File file = new File("/Users/aihe/tmp/jdk13demo/classes.lst");
assertThat(file).exists();
assertThat(contentOf(file)).contains("java/lang/System");
}
比较对象
@Test
public void assertObject(){
Person frodo = new Person("Frodo",30);
Person sauron = new Person("sauron",30);
assertThat(frodo).isEqualToComparingOnlyGivenFields(sauron,"age");
}
额外
AssertJ提供了非常丰富的比较、断言操作,开发中能想到的都有提供,实在是很多,想要查看具体有哪些操作的时候,点进去看一下提供的方法,方法名称也很容易理解。
所有相关的类型都可以在其api包下看到:

image-20191124214759064
最后
AssertJ作为一个好用的工具,还是值得试一试的。
参考: