一、概述

开发时,单元测试已经是必不可少的,一检验代码的逻辑,二、也方便他人代码的理解;

二、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进行单元测试时,有可能会出现以下问题:

springboot junit5如何自测 spring boot junit_单元测试


**问题原因:**项目中引入了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>

以上方案二选一均可解决以上问题;

五、结束语

赠人玫瑰,手有余香,请留下你的赞或者宝贵意见吧!