AssertJ-让断言更轻松

AssertJ提供了流式调用的Java断言语句,主要就是简化了断言语句的写法,改善了断言的可读性。

  • 提供了丰富的断言特性
  • 更有意义的错误消息
  • 提升了测试代码可读性

使用

1 引入依赖包:

  • AssertJ 3.x需要Java8以上版本。3.x包含所有2.x的特性,并且增加了一些Java8的语法支持
  • AssertJ 2.x需要Java7以上版本

  org.assertj
  assertj-core
  
  3.14.0
  test


testCompile("org.assertj:assertj-core:3.14.0")

2 如果不使用AssertJ时的断言写法,就是会多写几行。

assertEquals(actual, expected);

assertNotNull(list);
assertTrue(list.isEmpty());

HashMap 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 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包下看到:

AssertJ-让断言更轻松_第1张图片
image-20191124214759064

最后

AssertJ作为一个好用的工具,还是值得试一试的。

参考:

https://assertj.github.io/doc/#overview

你可能感兴趣的:(AssertJ-让断言更轻松)