SpringBoot集成Junit单元测试实战

作者:技术拾光

时间:2026-06-10

浏览:379

@SpringBootTest加载完整应用上下文,支持配置类与Web环境。JUnit5为SpringBoot2.2后默认测试库,含Platform、Jupiter、Vintage三组件。集成JUnit4需引入vintage引擎或JUnit4框架,并使用@RunWith和@ContextConfiguration。

文章目录

@SpringBootTest 注解

先说说@SpringBootTest这个注解——它本质上就是告诉测试框架:这是一个Spring Boot集成测试类,需要将整个应用上下文加载起来,包括所有配置、组件和依赖。换句话说,它会模拟一次完整的应用启动,然后提供一个能用来运行集成测试的上下文环境。

SpringBoot集成Junit单元测试实战

这个注解有三个核心属性值得留意:

  • 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 JupiterJUnit 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的引入与使用,基本覆盖了日常开发中的主要场景。实际项目中选择哪个版本,需要根据项目具体情况而定,关键在于掌握各自对应的注解和配置方式。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章