3、断言(assertions)
断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:
检查业务逻辑返回的数据是否合理。
所有的测试运行结束以后,会有一个详细的测试报告;
1、简单断言
用来对单个值进行简单的验证。如:
方法说明assertEquals判断两个对象或两个原始类型是否相等assertNotEquals判断两个对象或两个原始类型是否不相等assertSame判断两个对象引用是否指向同一个对象assertNotSame判断两个对象引用是否指向不同的对象assertTrue判断给定的布尔值是否为 trueassertFalse判断给定的布尔值是否为 falseassertNull判断给定的对象引用是否为 nullassertNotNull判断给定的对象引用是否不为 null
测试类中
这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法
intadd(int i,int j){return i+j;}@TestvoidtestAssertions(){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("数组断言测试")voidtestArrayAssertions(){
Assertions.assertArrayEquals(newint[]{1,2},newint[]{1,2},"元素不一样");}
如果出错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIw5h70i-1646914968617)(D:\writeTest\Test\images\image-20220304180127862.png)]
3、组合断言
assertAll 方法接受多个 org.junit.jupiter.api.Executable 函数式接口的实例作为要验证的断言,可以通过 lambda 表达式很容易的提供这些断言
能设置异常报文
@Test@DisplayName("组合断言支持使用 lambda 表达式")voidtestAssertAll(){
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("异常断言")voidtestException(){
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 表达式")voidtestTimeout(){
Assertions.assertTimeout(Duration.ofMillis(1000),()-> Thread.sleep(500));}
一番体验下来,断言机制就是你调用的方法断言了什么,结果就得是什么,否则就报错说你这个跟要求不一样。如果一个断言出现了异常,后面的都不执行了
6、快速失败
使用 fail 可以使得方法直接失败,然后就抛异常终止后面的断言
@Test@DisplayName("assert fail 快速失败")voidtestFail(){
Assertions.fail("需要失败");
System.out.println("正常执行");}
版权归原作者 妙Lin 所有, 如有侵权,请联系我们删除。