一、概述
开发时,单元测试已经是必不可少的,一检验代码的逻辑,二、也方便他人代码的理解;
二、pom依赖
1、Junit4依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2、Junit5依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.6.RELEASE</version>
<!--<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
<!–兼容老的单元测试–>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>-->
</dependency>
这里采用的是junit5,所以将兼容junit4以前的jar都排除了;
三、相关使用
1、注解
Junit4 | Junit5 | 说明 |
@Test | @Test | 测试注解,标记一个方法可以作为一个测试用例 |
@Before | @BeforeEach | 被注解的方法会在类中的每个测试方法之前执行,以便执行某些必要的先决条件,例如数据的初始化等 |
@BeforeClass | @BeforeAll | 该注解与@Before注解作用类似,区别在于用在静态测试方法 |
@After | @AfterEach | 该注释表示,每一测试方法执行后都必须执行的操作(如执行每一个测试后重置某些变量,删除临时变量等) |
@AfterClass | @AfterAll | 与@After注解作用类似,区别在于用在静态测试方法 |
@Ignore | @Disabled | 当想暂时禁用特定的测试执行可以使用这个注解,每个被注解为@Ignore的方法将不再执行 |
@Runwith | @ExtendWith | 放在测试类名之前,用来确定测试在什么环境下运行,也可以不标注,会使用默认运行器 |
@Parameters | @ParameterizedTest | 用于使用参数化功能 |
@SuiteClasses | 用于套件测试 |
2、Junit4与Junit5比较
- JUnit 4将所有内容捆绑到单个jar文件中;
- Junit 5由3个子项目组成,即JUnit Platform,JUnit Jupiter和JUnit Vintage;
①JUnit Platform:定义了TestEngine用于开发在平台上运行的新测试框架的API;
②JUnit Jupiter:它具有所有新的junit注释和TestEngine实现,以运行使用这些注释编写的测试;
③JUnit Vintage:支持在JUnit 5平台上运行JUnit 3和JUnit 4编写的测试。
四、注意事项
使用Junit5进行单元测试时,有可能会出现以下问题:
**问题原因:**项目中引入了Junit4依赖,但是用的却是Junit5进行单元测试,且缺少junit-vintage-engine进行兼容;
解决方案:
1、直接引入以下依赖;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
该依赖包含所有的Junit5相关依赖且引入了Junit4依赖;
2、将Junit4依赖排除且去除Junit5中的junit-vintage-engine依赖,不需要兼容其他测试版本;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions>
<!--去除junit4-->
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
<!--去除兼容老的单元测试-->
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
以上方案二选一均可解决以上问题;
五、结束语
赠人玫瑰,手有余香,请留下你的赞或者宝贵意见吧!