SpringBoot3 集成Junit4 - 实践

news/2025/10/22 15:02:36/文章来源:https://www.cnblogs.com/wzzkaifa/p/19158052

目录

      • 1. 确保项目中包含JUnit 4依赖
        • 添加JUnit 4依赖
      • 2. 配置Spring Boot使用JUnit 4
        • 在测试类中使用`@RunWith`注解
      • 3. 编写测试代码
      • 4、总结
    • 【扩展】@RunWith(SpringRunner.class) 中SpringRunner的作用
      • 1. **加载 Spring 应用上下文(ApplicationContext)**
      • 2. **启用 Spring 依赖注入(Dependency Injection)**
      • 3. **支持Spring事务(Transaction Management)**
      • 4. **支持Spring的配置类(Configuration)**
      • 5. **支持 Spring TestContext Framework**
      • `SpringRunner.class` 实际上是 `SpringJUnit4ClassRunner.class` 的别名
      • 总结

在Spring Boot中集成JUnit 4其实也是非常简单的。尽管Spring Boot 3默认集成JUnit 5,但你仍然可以配置并使用JUnit 4。下面是集成JUnit 4的步骤。

1. 确保项目中包含JUnit 4依赖

首先,你需要确保pom.xml中包含JUnit 4的相关依赖。如果你已经有了spring-boot-starter-test依赖,可以选择将JUnit 5的依赖替换为JUnit 4,或者直接添加JUnit 4依赖。

添加JUnit 4依赖

pom.xml中,添加以下JUnit 4的依赖:

<dependencies><!-- Spring Boot Starter Test(JUnit 4支持)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId></exclusion><exclusion><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId></exclusion></exclusions></dependency><!-- 添加JUnit 4支持 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>

Spring Boot的spring-boot-starter-test默认集成JUnit 5,如果你要使用JUnit 4,可以排除JUnit 5的依赖,并添加JUnit 4的依赖。

2. 配置Spring Boot使用JUnit 4

Spring Boot默认启用了JUnit 5作为测试框架。如果你想使用JUnit 4,需要确保Spring Boot在运行时使用JUnit 4。为此,你需要配置测试类的运行器。

在测试类中使用@RunWith注解

JUnit 4使用@RunWith注解来指定一个自定义的测试运行器 。在Spring Boot中,你需要使用SpringRunner.class作为测试运行器,它会帮助你加载Spring应用上下文。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
@Test
public void test() {
// 编写测试代码
}
}

3. 编写测试代码

JUnit 4的测试代码与JUnit 5类似,只是使用不同的注解。例如,@Test注解用于标记测试方法,@Before@After分别用于测试方法前后的初始化和清理,@BeforeClass@AfterClass用于类级别的初始化和清理。

import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
@Before
public void setUp() {
// 测试前的初始化
}
@After
public void tearDown() {
// 测试后的清理
}
@Test
public void contextLoads() {
// 测试Spring上下文是否加载成功
}
}

4、总结

  • Spring Boot默认使用JUnit 5,但可以通过排除JUnit 5依赖并引入JUnit 4来使用JUnit 4。
  • 使用@RunWith(SpringRunner.class)来指定JUnit 4的测试运行器。
  • 编写测试时,可以使用JUnit 4的常见注解,如@Before@After@Test等。

通过以上步骤,你就可以在Spring Boot中使用JUnit 4进行单元测试了。如果你有其他问题或者遇到困难,随时告诉我!

【扩展】@RunWith(SpringRunner.class) 中SpringRunner的作用

@RunWith(SpringRunner.class) 是JUnit 4的一个注解,它告诉JUnit使用SpringRunner作为测试的运行器(Test Runner)。SpringRunner 是由 Spring Framework 提供的一个特殊的测试运行器,它能够为JUnit测试提供Spring的支持,确保Spring容器正确地加载和管理应用程序的上下文。

具体来说,SpringRunner 的作用包括:

1. 加载 Spring 应用上下文(ApplicationContext)

  • 当你使用@SpringBootTest注解时,Spring需要加载应用的上下文,SpringRunner会确保在执行测试时初始化Spring容器并注入测试所需的依赖。
  • 例如,它会启动 Spring 上下文,自动扫描并注入@Autowired注解的Bean。

2. 启用 Spring 依赖注入(Dependency Injection)

3. 支持Spring事务(Transaction Management)

  • 在使用Spring的事务管理时,SpringRunner会帮助你管理事务(比如,使用@Transactional注解)。每个测试方法运行后,可以自动回滚事务,保持数据库状态的一致性。

4. 支持Spring的配置类(Configuration)

5. 支持 Spring TestContext Framework

  • SpringRunner是 Spring TestContext Framework 的一部分,它提供了额外的功能,比如事件监听、测试环境的生命周期管理等。测试过程中,Spring会自动管理上下文的生命周期和状态,确保测试运行的一致性。

SpringRunner.class 实际上是 SpringJUnit4ClassRunner.class 的别名

总结

@RunWith(SpringRunner.class) 的作用是让JUnit 4在执行测试时,能够使用Spring的测试框架(TestContext Framework)进行测试。这让你能够在JUnit 4测试中:

  • 加载Spring应用上下文,
  • 自动注入依赖,
  • 使Spring的其他功能(如事务管理、事件监听等)能够正常工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:Spark Shuffle:分布式计算的数据重分布艺术

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年火焰检测器生产厂家最新推荐权威排名:涵盖防爆 / 一体化 / 紫外线 / 离子 / 红外线 / 红紫外复合 / 智能型,多维度解析助力企业精准选型

引言 当前工业领域对火焰检测器的需求日益严苛,不同场景下需匹配防爆、一体化、紫外线等多种类型产品,而市场中厂家技术水平悬殊,部分产品存在检测精度不足、适应复杂工况能力弱等问题,导致企业选型时易陷入 “选贵…

排序算法的介绍

排序算法的介绍概要排序算法是众多算法中常见的基本算法,它的任务是将一组数据按一定的顺序排列。排序算法广泛应用于数据处理、搜索优化、数据库管理等领域。不同的排序算法适用于不同的场景,本文将介绍几种常见的排…

调理neovide之 自定义keymap-不用starter-template的话,直接init.lua中改

感谢提供完整的 init.lua 内容!现在问题非常清晰了。 你没有使用标准的 LazyVim starter 配置,而是手动集成了 LazyVim/LazyVim 作为插件,并自定义了数据目录(D:/nvim-data)。 在这种模式下,LazyVim 不会自动加载…

MyEMS:用开源撕开能源管理 “黑箱”,让节能不再 “凭感觉”

当一家电子厂每月消耗数十万元电费,却查不出 “高能耗设备到底是谁”;当一个园区想对接光伏、储能系统,却被闭源厂商告知 “需额外支付 10 万元接口费”;当一所学校想统计各教学楼的用电规律,却只能对着零散的 Ex…

FPGA控制RGMII接口PHY芯片基础

FPGA控制RGMII接口PHY芯片基础 PHY RGMII Interface Timing注意事项 https://blog.csdn.net/wangmuzhang/article/details/133918767FPGA控制RGMII接口PHY芯片基础 https://www.cnblogs.com/moluoqishi/p/10846302.ht…

2025 年气泵厂家最新推荐权威榜单:小型 / 微型 / 耐腐蚀 / 微型真空 / 微型隔膜 / 防爆气泵公司选购指南

引言 当前气泵行业发展迅速,市场品牌数量激增,但行业乱象凸显。部分品牌技术薄弱,产品性能不稳定,无法满足医疗、环保、实验室分析仪器等专业领域的高精度需求;不少小品牌为逐利偷工减料,导致产品寿命短、故障多…

kettle基本操作4:使用日期字段增量数据同步

0.前言 两个数据库表之间使用日期(Date或timestamp)字段进行增量同步,是ETL操作的基本操作(本文举例的源表数据只新增不删除不修改的情况),最简单的步骤如下:获取目标表时间戳字段的max值; 获取源表时间戳字段…

冰川之国破例:冰岛首次发现蚊子,气候变化敲响警钟

冰川之国破例:冰岛首次发现蚊子,气候变化敲响警钟一向以“无蚊之国”著称的冰岛,其纯净的生态系统纪录近日被打破。冰岛大学与自然资源保护局的科学家团队本周联合证实,在冰岛境内首次发现并捕获了活的蚊子个体。这…

成语趣有奖微信小程序管理系统:趣味与变现兼具的优质选择

一、概述总结 “成语趣有奖” 是一款以成语闯关为核心玩法的微信小程序,由谷喵网络开发并在微擎应用商城上线。该小程序将经典的成语知识问答与趣味闯关模式相结合,同时融入金币奖励、奖品兑换及流量主广告变现等功能…

2025 年钛棒厂家最新推荐权威榜单:深度解析国内头部厂家国际市场开拓成绩及产品优势钛螺丝/加工件/医用/合金/异形件钛棒厂家推荐

随着全球工业升级加速,钛棒凭借高强度、耐腐蚀等特性,在航空航天、石油化工、医疗等领域需求激增,国际市场成为国内钛棒厂商的重要增长极。但当前国际市场存在标准不统一、贸易壁垒多、区域需求差异大等问题,许多厂…

掌门社交电商系统:赋能本地生活的三方共赢新生态

一、概述总结 掌门社交电商系统是一款深耕本地生活服务领域的专业化解决方案,依托微擎系统构建核心架构,聚焦本地活动折扣资源的整合与运营。其核心价值在于打造 “商家拓客、用户受益、平台获利” 的三方共赢模式,…

就餐宝微信小程序:重塑企业食堂管理新生态

一、概述总结 就餐宝是一款专为企业食堂量身打造的智能化管理小程序,聚焦食堂物料节省与就餐流程优化,通过数字化手段实现就餐全流程的规范化管理。该系统采用多端协同设计,涵盖总后台、分后台、员工小程序入口和食…

2025 年度茶叶行业优质厂家权威榜单:最新推荐全解析,小青柑 / 普洱等好茶选品指南

引言 茶叶市场正迎来新旧品牌交替的活跃期,既有老字号坚守品质,更有近五年崛起的新品牌以创新破局,但乱象同样凸显:原料产地模糊、工艺标准缺失导致品质参差不齐,消费者难辨优劣;采购商面对海量品牌,核实资质与…

MySQL的三大日志redolog,binlog,undolog

MySQL 的三大核心日志:redolog(重做日志)、binlog(二进制日志) 和 undolog(回滚日志),以及它们在事务处理和数据恢复中的作用。以下是要点汇总:🧱 redo log(重做日志)属于 InnoDB 存储引擎,用于崩溃恢复…

卸载 macOS 上所有版本的 Python

卸载 macOS 上所有版本的 Python卸载 macOS 上所有版本的 Python 彻底卸载 macOS 上所有版本的 Python(包括系统自带的、Homebrew 安装的、手动安装的等)。 ⚠️ 注意:macOS 自带的 Python 2.x 或 3.x 系统依赖它,…

如何解除百度网盘下载限速

如何解除百度网盘下载限速如何解除百度网盘下载限速?今天就教一下大家最新的方法。这个方法下载速度绝对能惊艳你。下面就让你看看我测试的速度把这个速度怎么样?还不错把。下面我就教一下大家打开我说的方法你会看到…

分布式专题——33 一台新机器进行Web页面请求的历程 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

开源隐私计算框架SecretFlow | 基于隐语的金融全链路场景介绍和应用实践

打开链接点亮社区Star,照亮技术的前进之路。每一个点赞,都是社区技术大佬前进的动力Github 地址: https://github.com/secretflow本文根据蚂蚁集团隐私计算产品专家 陈步华,在「隐语城市行成都站 X 蓉数大讲堂」的…

2025 最新智能卫浴镜厂家推荐榜单:家装酒店工装优选,除雾语音多功能品牌权威盘点多功能/语音/蓝牙/led/带灯智能卫浴镜厂家推荐

在智能家居渗透率持续攀升的当下,智能卫浴镜已成为家装、酒店及工装场景的品质之选,其融合的除雾、照明、语音交互等功能极大提升了使用体验。但市场涌入大量品牌后,劣质产品频现 —— 部分产品采用普通银镜导致短期…