当前位置: 首页 > news >正文

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 应用上下文&#xff08;ApplicationContext&#xff09;**2.…...

Scala的set的添加删减和查询

添加&#xff1a;最好用于不可变数组&#xff0c;因为它会产生新数组&#xff0c;而不是在原数组上进行修改。 在尾部添加元素 可变数组 删减&#xff1a;按元素值删除元素 - 查询&#xff1a;查询元素是否存在.contains package Test //Set //特点&#xff1a;元素是唯…...

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…...

【spark面试题】RDD和DataFrame以及DataSet有什么异同

RDD&#xff08;Resilient Distributed Dataset&#xff09;&#xff1a; 概念&#xff1a;可理解为分布式的列表。它的每个元素代表数据的一行&#xff0c;具有支持泛型这一显著特点。这种泛型支持让开发人员能够处理各种类型的数据&#xff0c;具有很强的灵活性。例如&#…...

[Python]关于Tensorflow+Keras+h5py+numpy一些骚操作备忘

起因&#xff1a;要在Anaconda使用Tensorflow和Keras框架 这里提前小结一下&#xff1a; 1&#xff0c;一定要注意Python、Tensorflow、Keras不同版本的对应关系。 2&#xff0c;交叉用conda install 和pip install安装依赖库可能容易出现问题&#xff0c;在Anaconda虚拟环境…...

深度学习:Transformer 详解

Transformer 详解 对于Transformer模型的详细解释&#xff0c;可以更深入地探讨其各个组成部分、工作原理、以及在自然语言处理任务中的应用方法。以下是对Transformer模型的一个更全面和详细的解释&#xff0c;包括其架构细节和关键技术&#xff1a; 1. 基本架构 Transform…...

jmeter 性能测试步骤是什么?

JMeter是一款流行的开源性能测试工具&#xff0c;用于测试各种服务器和网络应用的性能。在进行JMeter性能测试时&#xff0c;通常需要遵循以下步骤&#xff1a; 确定测试目标&#xff1a;首先&#xff0c;明确性能测试的目标。这可以是测试一个网站的负载能力、测试一个API的响…...

前端入门一之JS最基础、最基础语法

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff1b;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 初体验输入输出语句变量和常量常量变量…...

解决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++语言程序设计】字符串与浅层复制(深拷贝与浅拷贝)

字符串常量是用一对双引号括起来的字符序列&#xff0c;例如&#xff0c;"abcd" " China"" This is a string." 都是字符串常量。它在内存中的存放形式是&#xff0c;按串中字符的排列次序顺序存放&#xff0c;每个字符占1字节&#xff0c;并在末…...

《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)

《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09; 《TCP/IP网络编程》学习笔记 | Chapter 4&#xff1a;基于TCP的服务器端/客户端&#xff08;1&#xff09;理解TCP和UDPTCP/IP协议栈TCP/IP协议的诞生背景链路层网络层T…...

深入解析gdb -p 与gdb attach 的区别与使用场景

摘要&#xff1a;本文将详细对比gdb -p 与gdb attach 这两个命令的使用方法、场景及优缺点&#xff0c;帮助读者更好地理解并运用这两个调试工具。 一、引言 在Linux系统中&#xff0c;GDB&#xff08;GNU Debugger&#xff09;是一款功能强大的调试工具&#xff0c;广泛应用…...

C语言 | Leetcode C语言题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; /*** 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

论文阅读笔记&#xff1a;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

文章目录 本课程有什么&#xff1f;前端是什么&#xff1f;1. **前端概述**2. **前端的工作职责**3. **前端技术栈**6. **前端开发工具**7. **HTML、CSS、JS的关系** 本课程有什么&#xff1f; 本套课程是零基础入门保姆级课程&#xff0c;课程主要内容包含&#xff1a; HTML…...

[WSL][桌面][X11]WSL2 Ubuntu22.04 安装Ubuntu桌面并且实现GUI转发(Gnome)

1. WSL安装 这里不再赘述&#xff0c;WSL2支持systemd&#xff0c;如果你发现其没有systemd相关指令&#xff0c;那么你应该看看下面这个 https://blog.csdn.net/noneNull0/article/details/135950369 但是&#xff0c;Ubuntu2204用不了这个脚本&#xff0c;比较蛋疼。 – …...

PMC如何根据实际情况调整生产作业计划?

面对原材料价格波动、市场需求突变、供应链不确定性增加等多重挑战&#xff0c;PMC人员如何根据实际情况迅速调整生产作业计划&#xff0c;成为了决定企业能否稳健前行的关键。今天&#xff0c;天行健企业管理咨询公司就来深入探讨&#xff0c;PMC高手们是如何在复杂多变的环境…...

unity中 骨骼、纹理和材质关系

在Unity和游戏开发中&#xff0c;骨骼&#xff08;Skeleton&#xff09;、纹理&#xff08;Texture&#xff09;和材质&#xff08;Material&#xff09;是角色和物体渲染的关键组成部分&#xff0c;它们各自的作用和关系密切关联&#xff0c;通常共同工作来实现一个模型的最终…...

18、论文阅读:AOD-Net:一体化除雾网络

AOD-Net: All-in-One Dehazing Network 前言介绍相关工作物理模型传统方法深度学习方法 建模与扩展变换后的公式网络设计与高级特征任务相结合 除雾评价数据集和实现 前言 该论文提出了一种基于卷积神经网络&#xff08;CNN&#xff09;的图像去雾模型&#xff0c;称为 All-in…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...