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

解决单元测试 mock final类报错

文章目录

  • 前言
    • 解决单元测试 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.lryc.cn/news/543709.html

相关文章:

  • Kafka消费者相关
  • Vue nextTick原理回顾
  • JavaWeb登录认证
  • 半导体制造工艺(二)光刻工艺—掩模版
  • 计算机视觉算法实战——高精度分割(主页有源码)
  • DeepSeek-R1-Zero:基于基础模型的强化学习
  • 判断一个文件中以三个#号开头有多少行的shell脚本怎么写
  • PHP如何与HTML结合使用?
  • 计算机网络之传输层(传输层的功能)
  • 矩阵碰一碰发视频源码搭建之,支持OEM
  • DeepSeek 2月27日技术突破:三大核心功能解析与行业影响
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.2倒排索引原理与分词器(Analyzer)
  • Vue.js响应式基础
  • DeepSeek-OpenSourceWeek-第四天-Optimized Parallelism Strategies
  • 深入浅出:插入排序算法完全解析
  • 【Keras图像处理入门:图像加载与预处理全解析】
  • 企业级AI办公落地实践:基于钉钉/飞书的标准产品解决方案
  • 对于邮箱地址而言,短中划线(Hyphen, -)和长中划线(Em dash, —)有区别吗
  • C++ STL(三)list
  • Vue3+TypeScript 封装一个好用的防抖节流自定义指令
  • HarmonyOS+Django实现图片上传
  • vscode 版本
  • Python 爬虫实战案例 - 获取拉勾网招聘职位信息
  • 结构型模式---外观模式
  • Docker数据卷操作实战
  • 技术速递|Copilot Usage Advanced Dashboard 教程
  • 【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云
  • Shell学习(1/6) 教程-变量
  • 《Qt窗口动画实战:Qt实现呼吸灯效果》
  • RabbitMQ系列(六)基本概念之Routing Key