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…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
