AssertJ-让断言更轻松

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作为一个好用的工具,还是值得试一试的。

参考:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 注:之前关于Java8的认知一直停留在知道有哪些修改和新的API上,对Lambda的认识也是仅仅限于对匿名内部类的...
    mualex阅读 7,818评论 1 4
  • 欢迎交流java8新特性系列文章:https://www.jianshu.com/nb/27231419 . [...
    DoubleBin阅读 14,164评论 0 51
  • 你手中的笔轻轻地撇了一下 他跑了半辈子 跑遍了中国地图 也没能追回来
    鱼乐儿阅读 1,215评论 0 3
  • “记者问科比,你为何如此成功?科比反问:“你见过洛杉矶凌晨4点的样子吗?”记者摇头,科比:“我知道每一个洛杉矶的凌...
    IT学思想阅读 4,808评论 7 30