@SpringBootTest加载完整应用上下文,支持配置类与Web环境。JUnit5为SpringBoot2.2后默认测试库,含Platform、Jupiter、Vintage三组件。集成JUnit4需引入vintage引擎或JUnit4框架,并使用@RunWith和@ContextConfiguration。
SpringBoot集成Junit单元测试实战
时间:2026-06-10
浏览:379
文章目录
@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 常用测试注解
下表整理了最常用的注解,建议收藏:
| 注解 | 说明 |
|---|---|
| @Test | 单元测试 |
| @DisplayName | 为测试类或测试方法设置展示名称 |
| @BeforeEach | 在每个单元测试之前执行 |
| @AfterEach | 在每个单元测试之后执行 |
| @BeforeAll | 在所有单元测试之前执行一次,方法必须声明为static |
| @AfterAll | 在所有单元测试之后执行一次,方法必须声明为static |
| @Tag | 标记测试类型,方便筛选执行 |
| @Disabled | 让测试类或测试方法不执行 |
| @Timeout | 指定测试方法超时时间,超时即返回错误 |
| @ExtendWith | 为测试类或方法提供扩展类引用 |
| @RepeatedTest | 指定重复执行的次数 |
| @ParameterizedTest + @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的引入与使用,基本覆盖了日常开发中的主要场景。实际项目中选择哪个版本,需要根据项目具体情况而定,关键在于掌握各自对应的注解和配置方式。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。