单元测试MockitoExtension和SpringExtension

news2025/1/14 2:59:00
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 {

    @Mock
    private MyRepository myRepository; // 模拟 MyRepository

    @InjectMocks
    private MyService myService; // 将模拟的 myRepository 注入到 MyService 中

    @Test
    void 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 {

    @Autowired
    private MyService myService; // 注入 MyService Bean

    @Test
    void testServiceMethod() {
        // 测试服务方法
        String result = myService.getData();
        
        // 验证结果
        assertNotNull(result);
    }
}
特性MockitoExtensionSpringExtension
主要作用支持 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 上下文交互的组件。

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

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

相关文章

burpsiute的基础使用(2)

爆破模块(intruder): csrf请求伪造访问(模拟攻击): 方法一: 通过burp将修改,删除等行为的数据包压缩成一个可访问链接,通过本地浏览器访问(该浏览器用户处于登陆状态&a…

【ASP.NET学习】ASP.NET MVC基本编程

文章目录 ASP.NET MVCMVC 编程模式ASP.NET MVC - Internet 应用程序创建MVC web应用程序应用程序信息应用程序文件配置文件 用新建的ASP.NET MVC程序做一个简单计算器1. **修改视图文件**2. **修改控制器文件** 用新建的ASP.NET MVC程序做一个复杂计算器1.创建模型(…

Git 命令代码管理详解

一、Git 初相识:版本控制的神器 在当今的软件开发领域,版本控制如同基石般重要,而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造,最初是为了更好地管理 Linux 内核源代码。随着时间的推移,Git 凭借…

OpenCV实现基于交叉双边滤波的红外可见光融合算法

1 算法原理 CBF是*Cross Bilateral Filter(交叉双边滤波)*的缩写,论文《IMAGE FUSION BASED ON PIXEL SIGNIFICANCE USING CROSS BILATERAL FILTER》。 论文中,作者使用交叉双边滤波算法对原始图像 A A A, B B B 进行处理得到细节&#xff0…

项目实战--网页五子棋(用户模块)(1)

接下来我将使用Java语言,和Spring框架,实现一个简单的网页五子棋。 主要功能包括用户登录注册,人机对战,在线匹配对局,房间邀请对局,积分排行版等。 这篇文件讲解用户模块的后端代码 1. 用户表与实体类 …

机器学习之随机森林算法实现和特征重要性排名可视化

随机森林算法实现和特征重要性排名可视化 目录 随机森林算法实现和特征重要性排名可视化1 随机森林算法1.1 概念1.2 主要特点1.3 优缺点1.4 步骤1.5 函数及参数1.5.1 函数导入1.5.2 参数 1.6 特征重要性排名 2 实际代码测试 1 随机森林算法 1.1 概念 是一种基于树模型的集成学…

MySQL存储引擎、索引、索引失效

MySQL Docker 安装 MySQL8.0,安装见docker-compose.yaml 操作类型 SQL 程序语言有四种类型,对数据库的基本操作都属于这四种类,分为 DDL、DML、DQL、DCL DDL(Dara Definition Language 数据定义语言),是负责数据结构定义与数据…

WPF基础(1.1):ComboBox的使用

本篇文章介绍ComboBox的基本使用。 本篇文章的例子实现的功能:后端获取前端复选框中的选项之后,点击“确定”按钮,弹出一个MessageBox,显示用户选择的选项。 文章目录 1. 效果展示2. 代码逻辑2.1 前端代码2.2 后端代码 1. 效果展…

前端炫酷动画--文字(二)

目录 一、弧形边框选项卡 二、零宽字符 三、目录滚动时自动高亮 四、高亮关键字 五、文字描边 六、按钮边框的旋转动画 七、视频文字特效 八、立体文字特效让文字立起来 九、文字连续光影特效 十、重复渐变的边框 十一、磨砂玻璃效果 十二、FLIP动画 一、弧形边框…

android 官网刷机和线刷

nexus、pixel可使用google官网线上刷机的方法。网址:https://flash.android.com/ 本文使用google线上刷机,将Android14 刷为Android12 以下是失败的线刷经历。 准备工作 下载升级包。https://developers.google.com/android/images?hlzh-cn 注意&…

25/1/12 嵌入式笔记 学习esp32

了解了一下位选线和段选线的知识: 位选线: 作用:用于选择数码管的某一位,例如4位数码管的第1位,第2位) 通过控制位选线的电平(高低电平),决定当前哪一位数码管处于激活状…

探秘block原理

01 概述 在iOS开发中,block大家用的都很熟悉了,是iOS开发中闭包的一种实现方式,可以对一段代码逻辑进行封装,使其可以像数据一样被传递、存储、调用,并且可以保存相关的上下文状态。 很多block原理性的文章都比较老&am…

【Docker】入门教程

目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …

Bootstrap 前端 UI 框架

Bootstrap官网:Bootstrap中文网 铂特优选 Bootstrap 下载 点击进入中文文档 点击下载 生产文件是开发响应式网页应用,源码是底层逻辑代码,因为是要制作响应式网页,所以下载开发文件 引入 css 文件, bootstrap.css 和 …

Docker与微服务实战2-基础篇

1.学习一门新技术的理念 1.是什么 2.能干吗 3.去哪下载 4.怎么玩 5.永远的helloworld跑起来一次 AB法则 before 与 after 的对比 2.为什么会有Docker出现 3.docker理念 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化…

蓝桥杯_B组_省赛_2022(用作博主自己学习)

题目链接算法11.九进制转十进制 - 蓝桥云课 进制转换 21.顺子日期 - 蓝桥云课 时间与日期 31.刷题统计 - 蓝桥云课 时间与日期 41.修剪灌木 - 蓝桥云课 思维 51.X 进制减法 - 蓝桥云课 贪心 61.统计子矩阵 - 蓝桥云课 二维前缀和 71.积木画 - 蓝桥云课 动态规划 82.扫雷 - 蓝桥…

CES 2025|美格智能高算力AI模组助力“通天晓”人形机器人震撼发布

当地时间1月7日,2025年国际消费电子展(CES 2025)在美国拉斯维加斯正式开幕。美格智能合作伙伴阿加犀联合高通在展会上面向全球重磅发布人形机器人原型机——通天晓(Ultra Magnus)。该人形机器人内置美格智能基于高通QC…

PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获

目录 一、数据库操作应用场景 二、安装PyMysql 三、事务的概念 四、数据库的准备 五、PyMysql连接数据库 1、建立连接方法 2、入门案例 六、PyMysql操作数据库 1、数据库查询 1️⃣查询操作流程 2️⃣cursor游标 ​3️⃣查询常用方法 4️⃣案例 5️⃣异常捕获 …

了解Node.js

Node.js是一个基于V8引擎的JavaScript运行时环境,它允许JavaScript代码在服务器端运行,从而实现后端开发。Node.js的出现,使得前端开发人员可以利用他们已经掌握的JavaScript技能,扩展技能树并成为全栈开发人员。本文将深入浅出地…

Unreal Engine 5 (UE5) Metahuman 的头部材质

在图中,你展示了 Unreal Engine 5 (UE5) Metahuman 的头部材质部分,列出了头部材质的多个元素。以下是对每个部分的解释: 材质解释 Element 0 - MI_HeadSynthesized_Baked 作用: 这是 Metahuman 的主要头部材质,控制整…