欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
关于《JUnit5学习》系列《JUnit5学习》系列旨在通过实战提升SpringBoot环境下的单元测试技能,一共八篇文章,链接如下:
Assumptions类
Assertions类
按条件执行
标签(Tag)和自定义注解
参数化测试(Parameterized Tests)基础
参数化测试(Parameterized Tests)进阶
综合进阶(终篇)
本篇概览本文是《JUnit5学习》系列的第一篇,通过实战学习在SpringBoot框架下JUnit5的基本功能,全篇章节如下:
JUnit5简介
SpringBoot对JUnit5的依赖
常用注解简介
5版本已废弃的注解介绍
进入实战环节,先介绍版本和环境信息
创建《JUnit5学习》系列源码的父工程
创建子工程,编码体验常用注解
关于JUnit5JUnit是常用的java单元测试框架,5是当前最新版本,其整体架构如下(图片来自网络):
2. 从上图可见,整个JUnit5可以划分成三层:顶层框架(Framework)、中间的引擎(Engine),底层的平台(Platform);
3. 官方定义JUnit5由三部分组成:Platform、Jupiter、Vintage,功能如下;
4. Platform:位于架构的最底层,是JVM上执行单元测试的基础平台,还对接了各种IDE(例如IDEA、eclipse),并且还与引擎层对接,定义了引擎层对接的API;
5. Jupiter:位于引擎层,支持5版本的编程模型、扩展模型;
6. Vintage:位于引擎层,用于执行低版本的测试用例;
可见整个Junit Platform是开放的,通过引擎API各种测试框架都可以接入;
SpringBoot对JUnit5的依赖这里使用SpringBoot版本为2.3.4.RELEASE,在项目的pom.xml中依赖JUnit5的方法如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>如下图红框,可见JUnit5的jar都被spring-boot-starter-test间接依赖进来了:
曾经的RunWith注解在使用JUnit4的时候,咱们经常这么写单元测试类:
@RunWith(SpringRunner.class) @SpringBootTest public class XXXTest {对于上面的RunWith注解,JUnit5官方文档的说法如下图红框所示,已经被ExtendWith取代:
3. 咱们再来看看SpringBootTest注解,如下图,可见已经包含了ExtendWith:
4. 综上所述,SpringBoot+JUnit5时,RunWith注解已经不需要了,正常情况下仅SpringBootTest注解即可,如果对扩展性有更多需求,可以添加ExtendWith注解,如下图: 常用的JUnit5注解(SpringBoot环境)
注意,接下来提到的测试方法,是指当前class中所有被@Test、@RepeatedTest、@ParameterizedTest、@TestFactory修饰的方法;
ExtendWith:这是用来取代旧版本中的RunWith注解,不过在SpringBoot环境如果没有特别要求无需额外配置,因为SpringBootTest中已经有了;
Test:被该注解修饰的就是测试方法;
BeforeAll:被该注解修饰的必须是静态方法,会在所有测试方法之前执行,会被子类继承,取代低版本的BeforeClass;
AfterAll:被该注解修饰的必须是静态方法,会在所有测试方法执行之后才被执行,会被子类继承,取代低版本的AfterClass;
BeforeEach:被该注解修饰的方法会在每个测试方法执行前被执行一次,会被子类继承,取代低版本的Before;
AfterEach:被该注解修饰的方法会在每个测试方法执行后被执行一次,会被子类继承,取代低版本的Before;
DisplayName:测试方法的展现名称,在测试框架中展示,支持emoji;
Timeout:超时时长,被修饰的方法如果超时则会导致测试不通过;
Disabled:不执行的测试方法;
5版本已废弃的注解