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的其他功能(如事务管理、事件监听等)能够正常工作。

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

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

相关文章

STM32-PWR低功耗

一、概述 PWR&#xff08;Power Control&#xff09;电源控制&#xff0c;PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能可编程电压监测&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上…

AI 证件照工具 HivisionIDPhotos

如何在 Linux 系统使用 Docker 在本地部署 HivisionIDPhotos&#xff0c;并结合路由侠内网穿透外网访问本地部署的 HivisionIDPhotos 。 第一步&#xff0c;本地部署安装 HivisionIDPhotos 1&#xff0c;检查 Docker 服务状态&#xff0c;确保 Docker 正常运行。 systemctl …

配置文件中spring.cloud.consul.host属性

spring.cloud.consul.host属性是SpringCloudConsul项目中的一个关键配置项&#xff0c;它用于指定Consul服务器的主机地址。在SpringBoot应用程序中&#xff0c;通过配置这个属性&#xff0c;可以使应用程序能够正确地连接到Consul服务&#xff0c;从而利用Consul提供的服务发现…

Jenkins面试整理-如何在 Jenkins 中进行并行构建?

在 Jenkins 中,并行构建 是通过并行执行多个任务来提高构建效率的常见方法。并行构建特别适用于需要执行多个独立步骤的工作流,如并行测试、构建不同平台上的软件或并行执行多个阶段。Jenkins 提供了两种方式来配置并行构建:Declarative Pipeline 和 Scripted Pipeline。下面…

springboot - 定时任务

定时任务是企业级应用中的常见操作 定时任务是企业级开发中必不可少的组成部分&#xff0c;诸如长周期业务数据的计算&#xff0c;例如年度报表&#xff0c;诸如系统脏数据的处理&#xff0c;再比如系统性能监控报告&#xff0c;还有抢购类活动的商品上架&#xff0c;这些都离不…

设计模式之责任链的通用实践思考

责任链模式通常一般用在方法的拦截、监控、统计方面&#xff0c;比较典型的就是Spring的AOP拦截。 但写一些小的基础能力框架的时候&#xff0c;用AOP比较中&#xff0c;所以一般都是自己针对特定的功能写一些定制的责任链工具类&#xff0c;不太喜欢总是做一些定制化的东西&am…

根据某个字段禁用el-table里的checkbox

可以通过自定义列来实现 设置 :selectable"isSelectable" <template><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type"selection" width"55" :selectable&qu…

pandas——对齐运算+函数应用

引言&#xff1a;对齐运算是数据清洗的重要过程&#xff0c;可以按索引对齐进行运算&#xff0c;如果没对齐的位置则补NaN&#xff0c;最后也可以填充NaN 一、Series的对齐运算 1.Series 按行、索引对齐 import pandas as pds1 pd.Series(range(10, 20), indexrange(10)) s2…

2024/11/06学习日志

为了更好地记录并反思自己的学习状况&#xff0c;将每日学习的内容、时长、心得等记录于此日志。 于9月3日开始记录&#xff0c;计划每日记录&#xff0c;希望至少能够坚持一个学期。 学习内容&#xff1a; 大物&#xff1a; maxwell方程组&#xff0c;电磁波的初步。 计数…

画动态爱心(Python-matplotlib)

介绍 氵而已 由于用的是 AI&#xff0c;注释得非常清楚&#xff0c;自己改改也可以用 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name 尝试1 |User Pfolg # 2024/11/05 22:45 import numpy as np import matplotlib.pyplot as plt import matplot…

学习threejs,将多个网格合并成一个网格

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Geometry 几何体1.2 …

练习题 - Django 4.x Test 单元测试使用示例和配置方法

在现代软件开发中,单元测试是保障代码质量的一个重要环节。通过单元测试,开发者能够验证代码的正确性,确保代码的变更不会引入新的错误。Django 作为一个功能强大的 web 框架,内置了丰富的测试工具,使得开发者能够轻松编写、执行和维护测试用例。掌握 Django 的单元测试方…

对于一个需要渲染300帧的动画项目,云渲染要多久

探讨云渲染动画300帧需要多久的问题时&#xff0c;我们今天来从多个角度进行分析&#xff0c;对于一个需要渲染300帧的动画项目&#xff0c;传统的本地渲染方式可能会因为硬件限制而变得耗时且效率低下。幸运的是&#xff0c;【渲染101】云渲染技术的出现为这一问题提供了解决方…

系统上云-流量分析和链路分析

优质博文&#xff1a;IT-BLOG-CN 一、流量分析 【1】流量组成&#xff1a; 按协议划分&#xff0c;流量链路可分为HTTP、SOTP、QUIC三类。 HTTPSOTPQUIC场景所有HTTP请求&#xff0c;无固定场景国内外APP等海外APP端链路选择DNS/CDN(当前特指Akamai)APP端保底IP列表/动态IP下…

「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用

在鸿蒙应用中&#xff0c;Canvas 组件可以实现丰富的动态效果&#xff0c;适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画&#xff0c;以及性能优化策略。 关键词 Canvas 组件动态绘制动画效果动态进度条旋转和缩放性能优…

C 学习(4)

return 0; 前提&#xff1a;C 语言规定&#xff0c;main()是程序的入口函数&#xff0c;即所有的程序一定要包含一个main()函数。程序总是从这个函数开始执行&#xff0c;如果没有该函数&#xff0c;程序就无法启动。其他函数都是通过它引入程序的。 main()的写法&#xff0c…

Springboot3.3 + Mybatis / Mybatis-plus

Java17, Springboot 3.3.5, 项目一启动就报错&#xff1a; Invalid value type for attribute factoryBeanObjectType: java.lang.String 我知道问题出现在pom依赖的版本上。但网上对于Springboot3.3的配置资料并不多&#xff0c;且在我代码上实测还是会报错。搞了一天终于…

高亚科技签约酸动力,助力研发管理数字化升级

近日&#xff0c;中国企业管理软件资深服务商高亚科技与广东酸动力生物科技有限公司&#xff08;以下简称“酸动力”&#xff09;正式签署合作协议。借助高亚科技的8Manage PM项目管理软件&#xff0c;酸动力将进一步优化项目过程跟踪与节点监控&#xff0c;提升研发成果的高效…

java 实训第12天 (git版本控制继续)

Linux下使用到的命令&#xff1a; ls -al //查看当前目录下的文件及文件夹 mkdir //新建目录 rm -rf //递归强制删除文件夹 版本控制 一、安装配置 1、下载地址 https://git-scm.com/ 2、初始配置 #用户名 git config --global user.n…

15分钟学 Go 第 35 天:Go的性能调优 (7000字详细教程)

第35天&#xff1a;Go的性能调优 目标&#xff1a;理解Go语言中基本的性能优化&#xff0c;学习如何分析和提高Go程序的执行效率。 一、性能调优概述 性能调优是软件开发中的一个重要环节&#xff0c;它可以确保程序在资源有限的环境下高效运行。Go语言天生具备高效的性能表现…