当前位置: 首页 > 工具软件 > AssertJ > 使用案例 >

单元测试(三)AssertJ断言

逑阳泽
2023-12-01

assertj官方文档

1:AssertJ介绍

AssertJ是一个Java库,它提供了一组丰富的断言和真正有用的错误消息,提高了测试代码的可读性。主要用于替换junit中的assert断言。

1.1:maven依赖

 <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>3.21.0</version>
      <scope>test</scope>
    </dependency>

1.2:介绍

Assertions是您开始使用AssertJ时唯一需要的类,它提供了您需要的所有方法。

导包:import static org.assertj.core.api.Assertions.*;

1:支持的数据类型

对基本数据类型,复杂数据 类型,时间date,数字函数,类calss,对象object,文件File,输入流InputStream等支持,范围很广。

2:断言描述

对于断言描述的情况进行添加说明,而不只是默认的true或者false判断。使用as关键字

as(字符串描述,对象…参数)

demo

HashMap<Object, Object> map = new HashMap<>();
        map.put("name","xm");
        assertThat(map.get("name")).as("check your %s name",map.get("name"))
                .isEqualTo("xh");    //期望值

2:实战

1:基本类型断言

 @Test
    public void first(){
        int a=1;
        int d =3;
        assertThat(a).isEqualTo(d);
    }

2:string的断言

@Test  
public void testString() {  
    String str = null;  
    // 断言null或为空字符串  
    assertThat(str).isNullOrEmpty();  
    // 断言空字符串  
    assertThat("").isEmpty();  
    // 断言字符串相等 断言忽略大小写判断字符串相等  
    assertThat("Frodo").isEqualTo("Frodo").isEqualToIgnoringCase("frodo");  
    // 断言开始字符串 结束字符穿 字符串长度  
    assertThat("Frodo").startsWith("Fro").endsWith("do").hasSize(5);  
    // 断言包含字符串 不包含字符串  
    assertThat("Frodo").contains("rod").doesNotContain("fro");  
    // 断言字符串只出现过一次  
    assertThat("Frodo").containsOnlyOnce("do");  
    // 判断正则匹配  
    assertThat("Frodo").matches("..o.o").doesNotMatch(".*d");  
} 

3:list断言

  /*collections测试*/
    @Test
    public void three(){
        ArrayList<Integer> objects = new ArrayList<>();
        objects.add(1);
        objects.add(2);
        assertThat(1).isIn(objects);
        assertThat(3).isNotIn(objects);
     assertThat(objects).isInstanceOf(List.class);
     assertThat(objects).contains(1);
        ArrayList<Integer> objects2 = new ArrayList<>();
        objects2.add(1);
        objects2.add(2);
        /*用于两个集合(对象)间的测试*/
        assertThat(objects).isEqualTo(objects2);
    }

4:class类断言

@Test
    public void testClass1() {
        // 断言 是注解
        assertThat(Magical.class).isAnnotation();
        // 断言 不是注解
        assertThat(Rings.class).isNotAnnotation();
        // 断言 存在注解
        assertThat(Rings.class).hasAnnotation(Magical.class);
        // 断言 不是借口
        assertThat(Rings.class).isNotInterface();
        // 断言 是否为指定Class实例
        assertThat("string").isInstanceOf(String.class);
        // 断言 类是给定类的父类
        assertThat(Person.class).isAssignableFrom(Employee.class);
    }

    @Magical
    public enum Rings {
        oneRing, vilya, nenya, narya, dwarfRing, manRing;
    }
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Magical {}
    public class Person {}
    public class Employee extends Person {}
 类似资料: