单元测试MockitoExtension和SpringExtension
1. MockitoExtension
MockitoExtension
是 JUnit 5 提供的一个扩展,用于支持 Mockito 的集成。它可以自动初始化标记为 @Mock
、@InjectMocks
等的 Mockito 对象,而不需要显式调用 MockitoAnnotations.initMocks(this)
。
主要特点:
- 自动初始化
@Mock
、@Spy
、@InjectMocks
等注解的 Mockito 对象。 - 可以在单元测试中使用 Mockito 的模拟对象和行为。
使用场景:
- 单元测试:当你需要使用 Mockito 来模拟对象(mock)或者对某些对象的行为进行验证时,
MockitoExtension
非常适用。通常用于没有依赖 Spring 容器的独立单元测试。 - 模拟外部依赖:测试一个类时,如果该类依赖于外部服务或组件,可以使用 Mockito 模拟这些外部服务,以便集中测试目标类的逻辑。
@ExtendWith(MockitoExtension.class) // 启用 Mockito 扩展
public class MyServiceTest {@Mockprivate MyRepository myRepository; // 模拟 MyRepository@InjectMocksprivate MyService myService; // 将模拟的 myRepository 注入到 MyService 中@Testvoid testServiceMethod() {// 模拟行为when(myRepository.getData()).thenReturn("Mocked Data");// 测试服务方法String result = myService.getData();// 验证结果assertEquals("Mocked Data", result);}
}
2. SpringExtension
SpringExtension
是 JUnit 5 提供的一个扩展,用于 将 Spring TestContext Framework 集成到 JUnit 5 中。它使得 Spring 能够在 JUnit 5 测试生命周期中自动管理 Spring 应用上下文。
主要特点:
- 支持 Spring 的依赖注入:通过
@Autowired
注解将 Spring 容器中的 Bean 注入到测试类中。 - 可以使用
@SpringBootTest
或@WebMvcTest
等注解来启动 Spring 上下文,并进行集成测试。 - 支持 事务管理、配置文件注入、Spring MVC 测试 等功能。
- 依赖注入与应用上下文:通过 Spring 容器管理测试中的对象。
使用场景:
- 集成测试:适用于需要测试整个 Spring 应用上下文或部分组件(如控制器、服务等)是否正确工作时,尤其是当应用依赖于 Spring 的上下文和容器时。
- 测试带有 Spring 注解的类:如
@Autowired
、@Service
、@Repository
等,需要依赖 Spring 配置的 Bean。 - 数据库测试、Web 层测试:集成测试可能需要使用数据库、Web 服务等,而这些通常在 Spring 上下文中进行配置。
@ExtendWith(SpringExtension.class) // 启用 Spring 扩展
@SpringBootTest // 启动整个 Spring 上下文
public class MyServiceIntegrationTest {@Autowiredprivate MyService myService; // 注入 MyService Bean@Testvoid testServiceMethod() {// 测试服务方法String result = myService.getData();// 验证结果assertNotNull(result);}
}
特性 | MockitoExtension | SpringExtension |
---|---|---|
主要作用 | 支持 Mockito 对象的模拟和初始化。 | 支持 Spring 上下文管理和依赖注入。 |
测试类型 | 单元测试(不依赖 Spring 上下文)。 | 集成测试(需要 Spring 上下文)。 |
依赖注入支持 | 通过 @Mock、@InjectMocks 等注解提供 Mockito 的模拟对象。 | 通过 @Autowired 提供 Spring Bean 的依赖注入。 |
适用场景 | 测试类的单独行为,模拟外部依赖。 | 测试带有 Spring 管理的 Bean,集成测试。 |
启动 Spring 上下文 | 不需要启动 Spring 上下文。 | 启动 Spring 上下文并注入相关 Bean。 |
常用注解 | @Mock, @InjectMocks | @SpringBootTest, @WebMvcTest, @DataJpaTest 等 |
适合测试的对象 | 只关注单元功能,不依赖 Spring 配置或上下文。 | 需要与 Spring 上下文或容器交互的功能。 |
总结
MockitoExtension
:适用于 单元测试,专注于模拟和验证类的行为,通常不涉及 Spring 上下文。它简化了 Mockito 的使用。SpringExtension
:适用于 集成测试,支持在测试中使用 Spring 容器和依赖注入,通常用于测试与 Spring 上下文交互的组件。
相关文章:
单元测试MockitoExtension和SpringExtension
1. MockitoExtension MockitoExtension 是 JUnit 5 提供的一个扩展,用于支持 Mockito 的集成。它可以自动初始化标记为 Mock、InjectMocks 等的 Mockito 对象,而不需要显式调用 MockitoAnnotations.initMocks(this)。 主要特点: 自动初始化 Mock、Spy…...
网络安全 | WAF防护开通流程与技术原理详解
关注:CodingTechWork 引言 随着互联网安全形势的日益严峻,Web应用防火墙(WAF, Web Application Firewall)逐渐成为网站和应用的标准防护措施。WAF能够有效识别和防止如SQL注入、跨站脚本攻击(XSS)、恶意流…...

模型 断裂点理论(风险控制)
系列文章 分享模型,了解更多👉 模型_思维模型目录。设置小损失,防止大风险。 1 断裂点理论的应用 1.1 电路系统中的保险丝应用 背景介绍: 在工程学中,电路系统是现代科技中不可或缺的一部分,广泛应用于各…...

02.MPLS动态LSP配置实验
MPLS动态LSP配置实验 MPLS动态LSP配置实验基本配置MPLS部分查看LDP会话基本信息查看详细信息查看MPLS动态LSP配置实验 基本配置 接口地址和OSPF配置,省略!全网互通! 注意:8.8.8.8和9.9.9.9也要宣告! MPLS部分 [ar1]mpls lsr-id 1.1.1.1 [ar1]mpls Info: Mpls starting,…...
MySQL 中的Buffer Pool
深入解析 MySQL Buffer Pool:优化数据库性能的核心 引言 在关系型数据库管理系统(RDBMS)中,磁盘I/O通常是性能瓶颈之一。为了缓解这个问题,MySQL的InnoDB存储引擎引入了Buffer Pool这一概念。Buffer Pool作为内存中的…...

修复微pe系统uefi引导损坏windows failed to start...
打开微pe,点右下角生成iso镜像 再打开iso镜像,把里面所有文件复制到微pe启动盘的EFI分区(使用diskgenius才能看到该分区) 虚拟机启动测试...

【Vue3中使用crypto-js】crypto-js加密解密用法
目录 1、安装crypto2、创建crypto.js文件3、在main.js主文件中进行引用4、页面中进行使用5、实现效果展示6、加密模式解析以及iv参数使用 1、安装crypto npm install crypto-js 如果是在Typescript版本需要再安装 npm install --save types/crypto-js2、创建crypto.js文件 注…...

JavaWeb开发(九)JSP技术
1. JavaWeb JSP技术 1.1. JSP简介 1.1.1. 什么是JSP JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。在JSP中java代码与HTML共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容。 1.1.2. 为什么出现JSP技术 19…...

PADS Lyout布局布线实战技巧:布线优化及解决碎铜问题
1、通过加过孔 通过过孔复制 复制粘贴 也可以选择网络,选择右键,添加过孔来。 在一些孤铜的地方加过孔,加不了过孔的情况下,怎么办? 2、通过挖掉,不让铜在孤零零的地方。 右键,选择矩形&a…...
上下游服务间解耦的技术与管理
一、解耦为何至关重要 在当今软件研发的复杂生态中,耦合问题如影随形,困扰着众多开发者与企业。当多个模块、系统或团队紧密交织,相互依赖程度不断攀升,仿佛一张错综复杂的网,牵一发而动全身。就拿电商系统来说&#…...
如何解决HTML和CSS相关的问题,什么情况下会导致元素被遮挡?
在开发过程中,HTML 和 CSS 中的元素遮挡问题通常是由于布局、定位、层级等因素导致的。在使用 Vue.js 时,这些问题依然常见,尤其是涉及到动态渲染、条件渲染和组件嵌套的场景。以下是一些常见的导致元素被遮挡的原因,并通过 Vue.j…...

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇
本文档说明了 ModusToolbox 软体环境的 4 个层面,该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…...
[算法]布隆过滤器
布隆过滤器(Bloom Filter)是一种空间效率很高的概率型数据结构,它可以用来检测一个元素是否在一个集合中。它的特点是高效地插入和查询,但是有一定的误判率(False Positive)。误判率指的是错误地认为某个元…...

基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
作者:陆冬澄、周静 在现代软件研发体系中,.NET 平台由于其强大的功能、灵活性和丰富的开发工具,成为了构建 Windows 应用程序的热门选择。无论是桌面应用、Web 应用还是服务应用,.NET 提供了一系列强大的框架和工具,帮…...

Backend - C# asp .net core
目录 一、各大框架理解 (一)ASP.NET Core (二)ASP.NET Core Web Application (三)ASP.NET Core MVC (四)ASP.NET Core Web API (五)ASP.NET Core 和 EF …...

【合作原创】使用Termux搭建可以使用的生产力环境(九)
前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(八)-CSDN博客中我们讲到了如何安装IDEA社区版,并在Termux中安装VNC服务器,在proot-distro的Debian中启动xfce桌面,并通过这个方式解决了IDEA社区版中无…...
使用Supervisor在Ubuntu中实现后台自启动服务
在Ubuntu系统中,Supervisor是一个非常实用的进程管理工具,它可以让你的应用程序在后台运行,并且在系统启动时自动启动这些应用程序。下面,我将详细介绍如何在Ubuntu中使用Supervisor来实现后台自启动服务,并以一个具体…...

AIDD-人工智能药物设计-人工智能驱动的罕见病药物发现
JCIM | 人工智能驱动的罕见病药物发现 **罕见病(Rare Diseases,RDs)**是全球公共卫生领域的重大挑战,其特点是疾病种类繁多、症状复杂且诊断困难。尽管过去几十年出台了如《孤儿药法案》等法规推动研发,但超过90%的罕…...

安卓硬件加速hwui
安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始,Android 2D 渲染管道支持硬件加速,这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加,你的应用程序将消耗更多内存。 软件绘制&am…...

TDv2:一种用于离线数学表达式识别的新型树形结构解码器
TDv2:一种用于离线数学表达式识别的新型树形结构解码器 本文提出了一种针对手写数学表达式识别(HMER)任务的新型树形解码器(TDv2) ,旨在充分利用数学表达式的树结构标签进行更有效的建模和预测。相较于传统的LaTeX字符串解码器,该模型通过采用一个节点分类模块和一个分…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...