七、springboot 单元测试阶段 (2、JUnit5常用注解,3、断言(assertions) )
2、JUnit5常用注解
JUnit5的注解与JUnit4的注解有所变化
JUnit 5 User Guide
- @Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
- @ParameterizedTest :表示方法是参数化测试,下方会有详细介绍
- @RepeatedTest :表示方法可重复执行,下方会有详细介绍
- @DisplayName :为测试类或者测试方法设置展示名称
- @BeforeEach :表示在每个单元测试之前执行
- @AfterEach :表示在每个单元测试之后执行
- @BeforeAll :表示在所有单元测试之前执行
- @AfterAll :表示在所有单元测试之后执行
- @Tag :表示单元测试类别,类似于JUnit4中的@Categories
- @Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
- @Timeout :表示测试方法运行如果超过了指定时间将会返回错误
- @ExtendWith :为测试类或测试方法提供扩展类引用
import org.junit.jupiter.api.Test; //注意这里使用的是jupiter的Test注解!! public class TestDemo {@Test@DisplayName("第一次测试")public void firstTest() {System.out.println("hello world");}
3、断言(assertions)
断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:
检查业务逻辑返回的数据是否合理。
所有的测试运行结束以后,会有一个详细的测试报告;
3.1、简单断言
用来对单个值进行简单的验证。如:
方法 |
说明 |
assertEquals |
判断两个对象或两个原始类型是否相等 |
assertNotEquals |
判断两个对象或两个原始类型是否不相等 |
assertSame |
判断两个对象引用是否指向同一个对象 |
assertNotSame |
判断两个对象引用是否指向不同的对象 |
assertTrue |
判断给定的布尔值是否为 true |
assertFalse |
判断给定的布尔值是否为 false |
assertNull |
判断给定的对象引用是否为 null |
assertNotNull |
判断给定的对象引用是否不为 null |
@Test @DisplayName("simple assertion") public void simple() {assertEquals(3, 1 + 2, "simple math");assertNotEquals(3, 1 + 1);assertNotSame(new Object(), new Object());Object obj = new Object();assertSame(obj, obj);assertFalse(1 > 2);assertTrue(1 < 2);assertNull(null);assertNotNull(new Object()); }
3.2、数组断言
通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等
@Test @DisplayName("array assertion") public void array() {assertArrayEquals(new int[]{1, 2}, new int[] {1, 2}); }
3.3、组合断言
assertAll 方法接受多个 org.junit.jupiter.api.Executable 函数式接口的实例作为要验证的断言,可以通过 lambda 表达式很容易的提供这些断言
@Test
@DisplayName("assert all") public void all() {assertAll("Math",() -> assertEquals(2, 1 + 1),() -> assertTrue(1 > 0)); }
3.4、异常断言
在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。而JUnit5提供了一种新的断言方式Assertions.assertThrows() ,配合函数式编程就可以进行使用。
@Test @DisplayName("异常测试") public void exceptionTest() {ArithmeticException exception = Assertions.assertThrows(//扔出断言异常ArithmeticException.class, () -> System.out.println(1 % 0)); }
3.5、超时断言
Junit5还提供了Assertions.assertTimeout() 为测试方法设置了超时时间
@Test @DisplayName("超时测试") public void timeoutTest() {//如果测试方法时间超过1s将会异常Assertions.assertTimeout(Duration.ofMillis(1000), () -> Thread.sleep(500)); }
3.6、快速失败
通过 fail 方法直接使得测试失败
@Test @DisplayName("fail") public void shouldFail() {fail("This should fail"); }
七、springboot 单元测试阶段 (2、JUnit5常用注解,3、断言(assertions) )相关推荐
- 七、springboot 单元测试阶段 (1.JUnit5 的变化 )
1.JUnit5 的变化 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同.由三个 ...
- springboot 集成 Swagger2 配置以及常用注解的说明和使用 ( 超详细)
一.注解的使用 和 说明 结构化说明如下: @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" (也就是给类取别名) ...
- SpringBoot | 第六章:常用注解介绍及简单使用
前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等.这章节开始,开始总结一些关于springboot的综合开发的知识点.由于SpringBoot本身是基于Spri ...
- 七、springboot 单元测试阶段 (4、前置条件(assumptions)5、嵌套测试 6、参数化测试 7、迁移指南)
目录 4.前置条件(assumptions) 5.嵌套测试 6.参数化测试 7.迁移指南 4.前置条件(assumptions) JUnit 5 中的前置条件(assumptions[假设])类似于断 ...
- SpringBoot Cloud必须掌握的常用注解
使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件2.在配置中也可享受面向对象带来的好处3.类型安全对重构可以提供良好的支持4.减少复杂配置文件的同时亦能享受到springIoC容 ...
- SpringBoot指南(二)——常用注解及操作
文章目录 1 Spring 1.1 @SpringBootApplication 1.2 @Configuration 1.3 @Component.@Controller.@Service.@Rep ...
- 【Mybatisplus】创建Spring Boot工程实现用户自定义功能Service接口和常用注解总结
目录 1.测试自定义功能 2.通用Service 创建Service接口和实现类 测试查询数据库中有多少条记录 测试批量添加操作(通过单个批量增加循环实现) 3.常用注解(@TableName) 解决 ...
- SpringBoot教程(13) JUnit5详解 常用注解 BeforeEach BeforeAll ParameterizedTest RepeatedTest
JUnit5详解 常用注解 BeforeEach BeforeAll ParameterizedTest RepeatedTest 一.前言 1. 引入test包 二.注解 三.测试案例 1. @Be ...
- 【SpringBoot】SpringBoot常用注解
一.前言 首先这里说的SpringBoot常用注解是指在我们开发项目过程中,我们经常使用的注解,包含Spring.SpringBoot.SpringCloud.SpringMVC等这些框架中的注解,而 ...
最新文章
- 关于python中的作用域问题
- 【轉】Android编程之SparseArrayE详解
- 一次“ora-12170 tns 连接超时”的经历
- Cocos2D-Android-1之源码详解:2.ActionManagerTest
- linux 安全相关
- css过渡transition
- android服务的原理,Android学习笔记:IntentService
- Mantis安装过程笔记
- linux下的/dev/shm/ 以及与swap目录的区别
- 使用libhybris库linux调用android库
- [转]el-table表格翻页后仍记忆所选项
- C++:stack.pop() error: cannot initialize a variable of type ‘char‘ with an rvalue of type ‘void‘
- 灰色系统理论与灰色关联分析模型
- 微信公众号原主体已注销 如何办理账号迁移?
- 【Books系列】2022年:《拼职场》读书笔记
- 计算机台式硬件排名价格,台式机电脑主板排名
- 今天将网易博客的内容迁过来
- 《运营力——微信公众号 设计 策划 客服 管理 一册通》一一1.1 创博公众号团队简介...
- 鹿鼎记 / Royal Tramp (1992)
- 高级前端成长训练营|和阿龙一起学前端曝光——走进前端开发世界