SpringBoot3 集成Junit4
目录
- 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 {@Testpublic 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 {@Beforepublic void setUp() {// 测试前的初始化}@Afterpublic void tearDown() {// 测试后的清理}@Testpublic 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)
SpringRunner会自动为测试类注入Spring容器中的组件。例如,如果你有一个被@Service或@Component标注的类,SpringRunner会将这些依赖注入到测试类中。@Autowired、@MockBean等注解会正常工作,Spring会自动注入这些Bean到测试类的成员变量中。
3. 支持Spring事务(Transaction Management)
- 在使用Spring的事务管理时,
SpringRunner会帮助你管理事务(比如,使用@Transactional注解)。每个测试方法运行后,可以自动回滚事务,保持数据库状态的一致性。
4. 支持Spring的配置类(Configuration)
- 如果你的测试类需要加载特定的Spring配置类,
SpringRunner会确保这些配置类被正确加载。 - 你可以使用
@ContextConfiguration或@SpringBootTest注解指定要加载的配置类,SpringRunner会帮助加载这些配置。
5. 支持 Spring TestContext Framework
SpringRunner是 Spring TestContext Framework 的一部分,它提供了额外的功能,比如事件监听、测试环境的生命周期管理等。测试过程中,Spring会自动管理上下文的生命周期和状态,确保测试运行的一致性。
SpringRunner.class 实际上是 SpringJUnit4ClassRunner.class 的别名
SpringRunner.class是 Spring 4 引入的新的名称,它的实际实现类是SpringJUnit4ClassRunner.class。你可以把它看作是 Spring 提供的一个特定的JUnit 4测试运行器。
总结
@RunWith(SpringRunner.class) 的作用是让JUnit 4在执行测试时,能够使用Spring的测试框架(TestContext Framework)进行测试。这让你能够在JUnit 4测试中:
- 加载Spring应用上下文,
- 自动注入依赖,
- 使Spring的其他功能(如事务管理、事件监听等)能够正常工作。
相关文章:
SpringBoot3 集成Junit4
目录 1. 确保项目中包含JUnit 4依赖添加JUnit 4依赖 2. 配置Spring Boot使用JUnit 4在测试类中使用RunWith注解 3. 编写测试代码4、总结 【扩展】RunWith(SpringRunner.class) 中SpringRunner的作用1. **加载 Spring 应用上下文(ApplicationContext)**2.…...
Scala的set的添加删减和查询
添加:最好用于不可变数组,因为它会产生新数组,而不是在原数组上进行修改。 在尾部添加元素 可变数组 删减:按元素值删除元素 - 查询:查询元素是否存在.contains package Test //Set //特点:元素是唯…...
基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)
摘 要 由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改…...
【spark面试题】RDD和DataFrame以及DataSet有什么异同
RDD(Resilient Distributed Dataset): 概念:可理解为分布式的列表。它的每个元素代表数据的一行,具有支持泛型这一显著特点。这种泛型支持让开发人员能够处理各种类型的数据,具有很强的灵活性。例如&#…...
[Python]关于Tensorflow+Keras+h5py+numpy一些骚操作备忘
起因:要在Anaconda使用Tensorflow和Keras框架 这里提前小结一下: 1,一定要注意Python、Tensorflow、Keras不同版本的对应关系。 2,交叉用conda install 和pip install安装依赖库可能容易出现问题,在Anaconda虚拟环境…...
深度学习:Transformer 详解
Transformer 详解 对于Transformer模型的详细解释,可以更深入地探讨其各个组成部分、工作原理、以及在自然语言处理任务中的应用方法。以下是对Transformer模型的一个更全面和详细的解释,包括其架构细节和关键技术: 1. 基本架构 Transform…...
jmeter 性能测试步骤是什么?
JMeter是一款流行的开源性能测试工具,用于测试各种服务器和网络应用的性能。在进行JMeter性能测试时,通常需要遵循以下步骤: 确定测试目标:首先,明确性能测试的目标。这可以是测试一个网站的负载能力、测试一个API的响…...
前端入门一之JS最基础、最基础语法
前言 JS是前端三件套之一,也是核心,本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点;这篇文章是本人大一学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 文章目录 初体验输入输出语句变量和常量常量变量…...
解决Swp交换空间被占满问题
解决ubuntu交换空间被占满问题 step1: cat /proc/sys/vm/swappiness 60 step2: sudo sysctl vm.swappiness10 #临时修改 step3: sudo sh -c “echo “vm.swappiness10” >> /etc/sysctl.conf” step4: sysctl -p #生效...
草地景观中的土地覆被变化:将增强型大地遥感卫星数据组成、LandTrendr 和谷歌地球引擎中的机器学习分类与 MLP-ANN 场景预测相结合
目录 简介 方法 结论 代码1:影像集合 代码2: 随机森林和svm分类 结果 简介 了解草原生境在空间和时间上的动态对于评估保护措施的有效性和制定可持续管理方法至关重要,特别是在自然 2000 网络和欧洲生物多样性战略范围内。 根据遥感数据绘制的土地覆盖图对于了解植被…...
【c++语言程序设计】字符串与浅层复制(深拷贝与浅拷贝)
字符串常量是用一对双引号括起来的字符序列,例如,"abcd" " China"" This is a string." 都是字符串常量。它在内存中的存放形式是,按串中字符的排列次序顺序存放,每个字符占1字节,并在末…...
《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)
《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1) 《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)理解TCP和UDPTCP/IP协议栈TCP/IP协议的诞生背景链路层网络层T…...
深入解析gdb -p 与gdb attach 的区别与使用场景
摘要:本文将详细对比gdb -p 与gdb attach 这两个命令的使用方法、场景及优缺点,帮助读者更好地理解并运用这两个调试工具。 一、引言 在Linux系统中,GDB(GNU Debugger)是一款功能强大的调试工具,广泛应用…...
C语言 | Leetcode C语言题解之第542题01矩阵
题目: 题解: /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ type…...
论文阅读笔记:Image Processing GNN: Breaking Rigidity in Super-Resolution
论文阅读笔记:Image Processing GNN: Breaking Rigidity in Super-Resolution 1 背景2 创新点3 方法4 模块4.1 以往SR模型的刚性4.2 图构建4.2.1 度灵活性4.2.2 像素节点灵活性4.2.3 空间灵活性 4.3 图聚合4.4 多尺度图聚合模块MGB4.5 图聚合层GAL 5 效果5.1 和SOTA…...
前端介绍|基础入门-html+css+js
文章目录 本课程有什么?前端是什么?1. **前端概述**2. **前端的工作职责**3. **前端技术栈**6. **前端开发工具**7. **HTML、CSS、JS的关系** 本课程有什么? 本套课程是零基础入门保姆级课程,课程主要内容包含: HTML…...
[WSL][桌面][X11]WSL2 Ubuntu22.04 安装Ubuntu桌面并且实现GUI转发(Gnome)
1. WSL安装 这里不再赘述,WSL2支持systemd,如果你发现其没有systemd相关指令,那么你应该看看下面这个 https://blog.csdn.net/noneNull0/article/details/135950369 但是,Ubuntu2204用不了这个脚本,比较蛋疼。 – …...
PMC如何根据实际情况调整生产作业计划?
面对原材料价格波动、市场需求突变、供应链不确定性增加等多重挑战,PMC人员如何根据实际情况迅速调整生产作业计划,成为了决定企业能否稳健前行的关键。今天,天行健企业管理咨询公司就来深入探讨,PMC高手们是如何在复杂多变的环境…...
unity中 骨骼、纹理和材质关系
在Unity和游戏开发中,骨骼(Skeleton)、纹理(Texture)和材质(Material)是角色和物体渲染的关键组成部分,它们各自的作用和关系密切关联,通常共同工作来实现一个模型的最终…...
18、论文阅读:AOD-Net:一体化除雾网络
AOD-Net: All-in-One Dehazing Network 前言介绍相关工作物理模型传统方法深度学习方法 建模与扩展变换后的公式网络设计与高级特征任务相结合 除雾评价数据集和实现 前言 该论文提出了一种基于卷积神经网络(CNN)的图像去雾模型,称为 All-in…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
