解决单元测试 mock final类报错

news/2025/2/28 11:25:44/

文章目录

  • 前言
    • 解决单元测试 mock final类报错
      • 1. 报错原因
      • 2. 解决方案
      • 3. 示例demo
      • 4. 扩展

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


解决单元测试 mock final类报错

1. 报错原因

如果mock final类的话会报下面的错误。
在这里插入图片描述
原因是 Mockito 默认不支持 final 类和 final 方法的 mock,因此无法直接使用传统的 Mockito 进行 mock 。

2. 解决方案

因为我的项目使用的springBoot 版本为2.3.4,因此我对应的mockito-core版本为3.12.4

<dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>3.12.4</version><scope>test</scope>
</dependency>

因此对于该版本我只能使用 PowerMock 的方式来进行 mock final类。
对应的pom:

<dependency><groupId>org.powermock</groupId><artifactId>powermock-module-junit4</artifactId><version>2.0.9</version><scope>test</scope>
</dependency>
<dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito2</artifactId><version>2.0.9</version><scope>test</scope>
</dependency>

3. 示例demo

测试类:

public class TestController {@Autowiredprivate TestOneService service;public void yyyy(HttpServletResponse response){HSSFWorkbook yyyy = service.yyyy();try {ServletOutputStream outputStream = response.getOutputStream();yyyy.write(outputStream);outputStream.close();} catch (Exception e) {e.printStackTrace();}}
}

单元测试类:


@RunWith(PowerMockRunner.class)
@PrepareForTest({HSSFWorkbook.class})
@PowerMockIgnore({"javax.net.ssl.*","javax.management.*"})
public class TestControllerTest {@InjectMocksTestController testController;@MockTestOneService service;@Testpublic void test() throws IOException {HttpServletResponse response = Mockito.mock(HttpServletResponse.class);ServletOutputStream outputStream =  Mockito.mock(ServletOutputStream.class);HSSFWorkbook hssfWorkbook = PowerMockito.mock(HSSFWorkbook.class);PowerMockito.when(service.yyyy()).thenReturn(hssfWorkbook);PowerMockito.when(response.getOutputStream()).thenReturn(outputStream);testController.yyyy(response);Assert.assertTrue(true);}}

这里的重点在于使用PowerMockito来进行mock:
HSSFWorkbook hssfWorkbook = PowerMockito.mock(HSSFWorkbook.class);
同时添加 HSSFWorkbook 以支持 mock
@PrepareForTest({HSSFWorkbook.class})
执行效果:

在这里插入图片描述

4. 扩展

如果你的 Spring Boot是 2.5 及以上版本中,可以使用 Mockito 4.x 版本,该版本 mocking 已经支持 final 类和 final 方法。


http://www.ppmy.cn/news/1575493.html

相关文章

C++ 设计模式 十二:责任链模式 (读书 现代c++设计模式)

责任链 文章目录 责任链场景指针链代理链总结**责任链模式的核心思想****何时需要使用责任链模式&#xff1f;****责任链模式解决的核心问题****与其他设计模式的协同使用****与其他模式的对比****经典应用场景****实现步骤与关键点****注意事项****总结** 今天是第十二种设计模…

Android 布局系列(二):FrameLayout 布局的应用

引言 在安卓开发中&#xff0c;布局管理是构建用户界面的核心之一。对于简单的界面或是需要叠加多个视图的场景&#xff0c;FrameLayout 是一个非常实用的布局容器。它是安卓中最基础的布局之一&#xff0c;能够帮助我们轻松管理多个视图的叠加。尽管它没有复杂的排版功能&…

计算机毕业设计Python+DeepSeek-R1大模型考研院校推荐系统 考研分数线预测 考研推荐系统 考研(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

如何通过JS实现关闭网页时清空该页面在本地电脑的缓存存储?

要通过JavaScript实现关闭网页时清空该页面在本地电脑的缓存存储&#xff0c;可以采用以下方法&#xff1a; 使用window.onbeforeunload事件监听器&#xff1a; 在Vue.js应用中&#xff0c;可以在App.vue组件的mounted生命周期钩子中监听window.onbeforeunload事件&#xff0c…

WiFi IEEE 802.11协议精读:IEEE 802.11-2007,6,MAC service definition MAC服务定义

继续精读IEEE 802.11-2007 6&#xff0c;MAC service definition MAC服务定义 6.1 MAC服务概述 6.1.1 数据服务 此服务为对等逻辑链路控制&#xff08;LLC&#xff09;实体提供交换MAC服务数据单元&#xff08;MSDU&#xff09;的能力。为支持此服务&#xff0c;本地媒体访…

【 树 】

【树 】 目录1. 二叉搜索树&#xff08;BST&#xff09;的退化知识点示例 2. 平衡树的定义3. AVL 树知识点不平衡产生的原因旋转操作 4. AVL 树代码设计树节点旋转操作插入节点操作删除节点操作测试代码 红黑树的定义代码设计节点类设计左旋和右旋操作 插入操作删除操作黑侄情形…

什么是回调函数

回调函数是一种常见的编程概念&#xff0c;用于处理异步操作或事件驱动的程序。它允许我们在某个特定的时间点或条件满足时执行一段代码。 什么是回调函数&#xff1f; 回调函数是指在某个函数执行完毕后&#xff0c;将另一个函数作为参数传递给它&#xff0c;并在特定情况下调…

TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整

2025年春节假期已过&#xff0c;大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化&#xff0c;我们很高兴地宣布&#xff1a;TinyEngine v2.2版本正式发布&#xff01;本次更新带来了重要的功能增强------页面支持嵌套路由&#…