@SpringBootTest 注解
@SpringBootTest 注解的核心作用是告知测试框架:当前测试类是一个 Spring Boot 集成测试类,需要加载完整的应用上下文,包括所有配置、组件和依赖关系。简而言之,它会模拟一次完整的应用启动过程,为集成测试提供所需的上下文环境。

该注解包含三个核心属性,值得开发者重点关注:
- classes:用于指定需要加载的配置类。默认情况下,Spring Boot 会在当前测试类所在包及其子包中查找带有
@SpringBootApplication注解的主配置类。若默认配置不符合需求,或应用启动逻辑较为特殊(例如 main 方法中进行了自定义处理),则需手动指定classes属性,这实际上相当于执行SpringApplication.run(xxx.class, args)。如果启动逻辑过于复杂,建议放弃使用@SpringBootTest,直接在测试中手动调用启动类的 main 方法。 - webEnvironment:用于定义 Web 环境类型,默认值为
WebEnvironment.MOCK,即模拟 Web 环境,无需实际启动服务器。 - properties:允许向应用上下文中添加额外属性,用于覆盖配置文件中的已有配置项。
采用 @SpringBootTest 编写集成测试,能够真实验证整个应用中各组件、依赖关系及配置之间的协同工作,比单纯的单元测试更贴近生产环境,有效提升测试可靠性。
集成 JUnit 5
JUnit 5 是 JUnit 系列最新的主流版本,相较于前代版本进行了大量改进,更契合现代 Java 开发的需求。其架构主要分为三个组成部分:
| 组成部分 | 说明 |
|---|---|
| JUnit Platform | 在 JVM 上启动测试框架的基础平台,不仅支持 JUnit 自有的测试引擎,也允许其他测试引擎接入。 |
| JUnit Jupiter | JUnit 5 新功能的核心模块,提供全新的编程模型,并内置测试引擎。 |
| JUnit Vintage | 为了向后兼容旧项目,提供对 JUnit 4.x 和 3.x 的测试引擎支持。 |
引入 JUnit 5
自 Spring Boot 2.2.0 版本起,JUnit 5 已成为默认的单元测试库。因此,只要项目中 Spring Boot 版本不低于 2.2.0,在 pom.xml 中添加 spring-boot-starter-test 依赖,即可直接使用 JUnit 5 进行测试:
org.springframework.boot spring-boot-starter-test test
使用 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 常用测试注解
下表汇总了 JUnit 5 中最常用的注解,推荐收藏备查:
| 注解 | 说明 |
|---|---|
| @Test | 单元测试 |
| @DisplayName | 为测试类或测试方法定义展示名称 |
| @BeforeEach | 在每个单元测试方法执行前运行 |
| @AfterEach | 在每个单元测试方法执行后运行 |
| @BeforeAll | 在所有单元测试方法之前执行一次,要求方法声明为 static |
| @AfterAll | 在所有单元测试方法之后执行一次,要求方法声明为 static |
| @Tag | 用于标记测试类别,便于按需筛选执行 |
| @Disabled | 使测试类或测试方法跳过执行 |
| @Timeout | 指定测试方法的超时时间,超时后判定为失败 |
| @ExtendWith | 为测试类或方法注册扩展类 |
| @RepeatedTest | 指定测试方法重复执行的次数 |
| @ParameterizedTest + @ValueSource | 支持参数化单元测试,配合 @ValueSource 等提供参数 |
集成 JUnit 4
尽管 JUnit 5 已成为主流,但许多老旧项目仍在使用 JUnit 4,因此有必要详细介绍集成方法。
引入 JUnit 4
方式一
Spring Boot 2.4 及以上版本默认移除了 Vintage 引擎依赖,如果仍需使用 JUnit 4 的注解(如 @Test),则需要手动添加 junit-vintage-engine 依赖:
org.junit.vintage junit-vintage-engine test org.hamcrest hamcrest-core
方式二
另一种更为直接的方式:直接引入 JUnit 4 框架:
junit junit test
使用 JUnit 4
JUnit 4 测试类的写法如下,特别需要注意添加 @RunWith(SpringJUnit4ClassRunner.class) 和 @ContextConfiguration 注解:
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(){
// ...
}
}
总结
本文全面介绍了 Spring Boot 集成 JUnit 单元测试的关键知识点,包括 @SpringBootTest 注解的使用方法、JUnit 5 与 JUnit 4 的引入及实际运用,基本涵盖了日常开发中的常见场景。在实际项目中选择哪个版本,应根据项目具体情况决定,核心在于掌握各版本对应的注解和配置方式。
