SpringBoot--->>>单元测试-->>断言 assertions

2023-03-27 10:45:28

3、断言(assertions)

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:

检查业务逻辑返回的数据是否合理。

所有的测试运行结束以后,会有一个详细的测试报告;

1、简单断言

用来对单个值进行简单的验证。如:

方法 说明
assertEquals 判断两个对象或两个原始类型是否相等
assertNotEquals 判断两个对象或两个原始类型是否不相等
assertSame 判断两个对象引用是否指向同一个对象
assertNotSame 判断两个对象引用是否指向不同的对象
assertTrue 判断给定的布尔值是否为 true
assertFalse 判断给定的布尔值是否为 false
assertNull 判断给定的对象引用是否为 null
assertNotNull 判断给定的对象引用是否不为 null

测试类中

这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法

int add(int i,int j){
    return i+j;
}

@Test
void testAssertions(){
    int result = add(1, 2);
    //第一个参数是期望值,后一个值是实际需要判断的结果。在后面是设置的如果不满足断言报错的内容
    Assertions.assertEquals(3,result,"这两个值不相同");
    Assertions.assertNotEquals(4,result,"这两个值一样");
    Assertions.assertSame(3,result);
    Assertions.assertNotSame(32,result);
    //断言实际值
    Assertions.assertNull(null);
    Assertions.assertNotNull(result);
    //断言实际值操作
    Assertions.assertTrue(result > 0);
    Assertions.assertFalse(result == 4);
}
2、数组断言

通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

配置类中

也可以设置异常报文,第一个参数是期望值,第二个参数是实际值

@Test
@DisplayName("数组断言测试")
void testArrayAssertions(){
    Assertions.assertArrayEquals(new int[]{1,2},new int[]{1,2},"元素不一样");
}

如果出错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIw5h70i-1646914968617)(D:\writeTest\Test\images\image-20220304180127862.png)]

3、组合断言

assertAll 方法接受多个 org.junit.jupiter.api.Executable 函数式接口的实例作为要验证的断言,可以通过 lambda 表达式很容易的提供这些断言

能设置异常报文

@Test
@DisplayName("组合断言支持使用 lambda 表达式")
void testAssertAll(){
    Assertions.assertAll("组合判断",
            () -> Assertions.assertEquals(3,3),
            () -> Assertions.assertTrue(true && false));
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljFUs6Tq-1646914968618)(D:\writeTest\Test\images\image-20220304181756937.png)]

4、异常断言

在JUnit4时期,想要测试方法的异常情况时,需要用**@Rule注解的ExpectedException变量还是比较麻烦的。而JUnit5提供了一种新的断言方式Assertions.assertThrows()** ,配合函数式编程就可以进行使用。

@Test
@DisplayName("异常断言")
void testException(){
    Assertions.assertThrows(ArithmeticException.class,
            () -> System.out.println(10/0));
}

不满足断言机制

**org.opentest4j.AssertionFailedError: Expected java.lang.ArithmeticException to be thrown, but nothing was thrown.**

5、超时断言

Junit5还提供了Assertions.assertTimeout() 为测试方法设置了超时时间

测试类中

@Test
@DisplayName("超时断言 lambda 表达式")
void testTimeout(){
    Assertions.assertTimeout(Duration.ofMillis(1000),
            () -> Thread.sleep(500));
}

一番体验下来,断言机制就是你调用的方法断言了什么,结果就得是什么,否则就报错说你这个跟要求不一样。如果一个断言出现了异常,后面的都不执行了

6、快速失败

使用 fail 可以使得方法直接失败,然后就抛异常终止后面的断言

@Test
@DisplayName("assert fail 快速失败")
void testFail(){
    Assertions.fail("需要失败");
    System.out.println("正常执行");
}
  • 作者:妙Lin
  • 原文链接:https://blog.csdn.net/m0_55668855/article/details/123410425
    更新时间:2023-03-27 10:45:28