SpringBoot集成Junit单元测试实践

 更新时间:2026年06月08日 16:09:02   作者:JiaHao汤  
这段文章详细介绍了@SpringBootTest注解在SpringBoot测试中的应用,并对比了JUnit4和JUnit5的主要特性与使用方法,涵盖测试环境配置、属性注入及集成测试场景,同时介绍了JUnit5作为SpringBoot测试框架的集成方式和常用注解,帮助开发者更好地理解和应用测试框架

@SpringBootTest 注解

@SpringBootTest 注解作用是指示测试类是一个 SpringBoot 应用程序的集成测试类,用于加载完整的应用程序上下文,包括所有的配置、组件和依赖项。

它会模拟启动整个应用程序,并提供一个可用于执行集成测试的应用程序上下文。

@SpringBootTest 注解可以配置以下属性:

  • classes:指定要加载的配置类。使用 @SpringBootTest 注解时,SpringBoot 会尝试查找并加载主应用程序类(通常是带有 @SpringBootApplication 注解的类),然后基于该类的配置启动应用程序上下文。如果不指定 classes 属性,Spring Boot 会默认寻找当前测试类所在包及其子包下的带有 @SpringBootApplication 注解的主配置类。指定 classes 属性的本质是调用该启动类 main 方法中的 SpringApplication.run(xxx.class, args); 方法启动 SpringBoot,如果启动 SpringBoot 的逻辑是定制的,那么就不能使用 @SpringBootTest(替代方案是通过在单元测试手动调用启动类的 main 方法启动)。
  • webEnvironment:指定 Web 环境的类型。默认为 WebEnvironment.MOCK,表示使用模拟的 Web 环境。
  • properties:指定要添加到应用程序上下文的属性。可以用于覆盖应用程序配置中的属性值。

使用 @SpringBootTest 可以编写集成测试,测试整个应用程序的各个组件、依赖项和配置的交互。它提供了一个真实的应用程序上下文,能够模拟和测试实际运行时的行为。

集成 Junit 5

JUnit 5 是 JUnit 框架的第五个主要版本,是用于 Java 编程语言的一个广泛使用的单元测试框架。相较于之前的版本,JUnit 5 有许多显著的改进和新特性,以更好地满足现代 Java 开发的测试需求。

以下是 JUnit 5 的组成部分:

组成部分说明
JUnit Platform在 JVM 上启动测试框架的基础,不仅支持JUnit 自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter提供了 JUnit 5 的新的编程模型,是 JUnit 5 新特性的核心。内部包含了一个测试引擎,用于在 JUnit Jupiter 上运行。
JUnit Vintage由于 JUnit 已经发展多年,为了照顾老的项目,JUnit Vintage 提供了兼容 JUnit 4.x、JUnit 3.x 的测试引擎。

引入 Junit 5

SpringBoot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,所以对于 SpringBoot 2.2.0 及以上的版本而言,只需要在 pom.xml 中引入 spring-boot-starter-test 模块即可支持对 Junit 5 单元测试框架的集成:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

使用 JUnit 5

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = xxx.class)
public class MyTest {
    
    @Test
    void myTest(){
        // ...
    }
    
}

JUnit 5 常用测试注解

注解说明
@Test单元测试
@DisplayName为测试类或测试方法设置展示名称
@BeforeEach在每个单元测试之前执行
@AfterEach在每个单元测试之后执行
@BeforeAll在所有单元测试之前执行,方法必须用 static 关键字声明为静态方法,否则会报错
@AfterAll在所有单元测试之后执行,方法必须用 static 关键字声明为静态方法,否则会报错
@Tag表示单元测试的类型
@Disabled表示测试类或测试方法不执行
@Timeout表示测试方法运行如果超过制定时间将返回错误
@ExtendWith为测试类或测试方法提供扩展类引用
@RepeatedTest重复执行的次数
@ParameterizedTest + @ValueSource携带参数的单元测试

集成 Junit 4

引入 Junit 4

方式一

SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖(无法使用 Junit 4 功能,如 @Test 等),如果需要兼容 JUnit 4 需要自行引入。

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
    		<artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

方式二

直接引入 JUnit 4 框架:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>

使用 JUnit 4

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.junit.Test;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class LocalTest {
    @Test
    void test(){
        // ...
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java EasyExcel实现合并相同内容单元格与动态标题功能

    Java EasyExcel实现合并相同内容单元格与动态标题功能

    这篇文章主要为大家详细介绍了Java EasyExcel如何实现合并相同内容单元格与动态标题功能,文中的示例代码讲解详细,有需要的小伙伴可以参考下
    2023-12-12
  • java -jar命令的具体使用

    java -jar命令的具体使用

    java -jar命令是一种方便快捷地在命令行中运行Java可执行jar文件的方法,本文主要介绍了java -jar命令的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java时区转换实例代码解析

    Java时区转换实例代码解析

    这篇文章主要介绍了Java时区转换实例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java使用jdbc连接MySQL数据库实例分析

    Java使用jdbc连接MySQL数据库实例分析

    这篇文章主要介绍了Java使用jdbc连接MySQL数据库,结合实例形式分析了Java基于jdbc链接mysql的相关配置及工具类的定义相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

    MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)

    本文主要介绍了MyBatis-Plus实现2种分页方法,主要包括QueryWrapper查询分页和SQL查询分页,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • java的poi技术读取和导入Excel实例

    java的poi技术读取和导入Excel实例

    本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下。
    2016-11-11
  • Spring启动时实现初始化有哪些方式?

    Spring启动时实现初始化有哪些方式?

    今天给大家带来的文章是关于Spring的相关知识,文章围绕着Spring启动时实现初始化有哪些方式展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • java实现系统托盘示例

    java实现系统托盘示例

    桌面的系统托盘即当程序最小化或者关闭按钮程序并没有退出,而是最小化在任务状态区域,下面是使用java实现系统托盘示例
    2014-03-03
  • JAVA发送HTTP请求的多种方式详细总结

    JAVA发送HTTP请求的多种方式详细总结

    目前做项目中有一个需求是这样的,需要通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断,下面这篇文章主要给大家介绍了关于JAVA发送HTTP请求的多种方式总结的相关资料,需要的朋友可以参考下
    2023-01-01
  • @JsonSerialize不起作用的解决方案

    @JsonSerialize不起作用的解决方案

    这篇文章主要介绍了@JsonSerialize不起作用的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论