Mockito 实现原理(3):如何对 final 类进行 mock

这篇具有很好参考价值的文章主要介绍了Mockito 实现原理(3):如何对 final 类进行 mock。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

前面两篇提到,Mockito 默认基于创建派生类(subclass)来实现 mock(包括 spy)。

那么问题来了,如果我的类标记为 final,明确禁止创建派生类,那不就没法 mock 了吗?

为了解决这个问题,Mockito 2 中引入了 InlineByteBuddyMockMaker。和前面讨论过的默认的 SubclassByteBuddyMockMaker 相比,这个 InlineByteBuddyMockMaker 同样基于 Byte Buddy 这个提供 Java 字节码操作功能的第三方库,但会尽量不通过创建派生类来实现 mock。

(注:本文基于 Mockito 4.6.1 源码)

方法

正常方法

对 final 类进行 mock,需要用 InlineByteBuddyMockMaker 替换掉默认的 SubclassByteBuddyMockMaker

替换方法是通过创建一个配置文件。按照这篇教程,应该是在 src/test/resources/mockito-extensions 这个目录下,创建一个名为 org.mockito.plugins.MockMaker 的文件(这个名字其实就是 MockMaker 接口,我们其实就是在为这个接口指定一个实现,否则就会用默认的 SubclassByteBuddyMockMaker 实现了),然后在这个文件里写入:

mock-maker-inline

或者(下面这个是我在源码注释中看到的,其实就是我们要使用的实现类):

org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker

阅读源码时可以使用的方法

不幸的是,我用这个方法暂时还没有成功。但因为我是在研究 Mockito 的源码,所以我直接修改了源码中的这个文件:文章来源地址https://www.toymoban.com/news/detail-490800.html

// org/mockito/internal/configuration/plugins/DefaultMockitoPlugins.java
// 第 29 行开始
DEFAULT_PLUGINS.put(
		

到了这里,关于Mockito 实现原理(3):如何对 final 类进行 mock的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Junit4 + Mockito进行单元测试实战案例

    ​ 实战代码案例: ​​​​​​​​​​​ 注意:idea2021.3.3之前的版本都搜索不到这个插件。 使用TestMe自动生成单元测试代码: 不是自动化执行的单元测试都是无意义的,项目中那么多单测,难道一个一个点吗? 引入maven-surefire-plugin插件用于自动化执行单测。 include里表

    2024年02月16日
    浏览(52)
  • 【.Net动态Web API】背景与实现原理

    🚀前言 本文是《.Net Core进阶编程课程》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:通过源码实例来讲解Asp.Net Core进阶知识点,让大家完全掌握每一个知识点。 专栏适用于人群:Web后端开发人员 ————————————————

    2024年04月22日
    浏览(30)
  • 在Spring Boot环境中使用Mockito进行单元测试

    Mockito是一个流行的Java mocking框架,它允许开发者以简单直观的方式创建和使用模拟对象(mocks)。Mockito特别适用于在Spring Boot环境中进行单元测试,因为它能够轻松模拟Spring应用中的服务、存储库、客户端和其他组件。通过使用Mockito,开发者可以模拟外部依赖,从而使单元测

    2024年03月23日
    浏览(49)
  • 基于fabric.js的图片编辑器, 画布背景实现原理

    使用了element-plus提供的图片上传 el-upload 组件 图片上传支持两种元素,普通图片元素和背景图片元素,所以定义属性type进行区分 type为 Image 为普通图片, background 为背景 背景也是一张图片,使用fabric.Image创建图片元素 因为没有图片服务器所以把上传的文件转换了base64图片,作为f

    2024年02月02日
    浏览(48)
  • Qt如何实现动态背景-视频背景

    需求:加载视频作为视频背景,在上层可以进行图片的动画化,或是进行其他操作。 几种方法: 1、直接将视频弄成一个QDialog, 然后再上层在弄一个QDialog,背景透明即可。但遇到一个问题,QDialog没办法局部透明。 2、使用QOpenGLWidget: 这个方案没有使用。 3、使用QGraphicsVide

    2024年02月04日
    浏览(36)
  • Spring Boot使用JUnit和Mockito进行Service层单元测试

      在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?那么在SpringBoot项目中我们是如何对Service层的方法进行测试的呢?   单元测试是一种软件测试方法,用于测试代码的最小可测试单元。在Java开发

    2024年02月03日
    浏览(52)
  • 搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试

    SpringBoot支持集成Mockito做单元测试,有时候SpringBoot有很多外部依赖,在本地很难启动或者启动时间很长,而我们只想对某个方法进行测试,需要怎样做呢? 一、本文要点 接前文,我们已经已介绍在两种mock模式下,怎样根据入参返回自定义mock结果,但都是通过启动SpringBoot项

    2024年02月06日
    浏览(44)
  • 网络原理(5)--HTTPS是如何进行加密的

    💕\\\"Echo\\\"💕 作者:Mylvzi 文章主要内容:网络原理(5)–HTTPS是如何进行加密的 在网络原理(4)中介绍了HTTP协议的相关内容,HTTP协议在传输的过程中存在着安全问题,实际上现在的网络中基本不再使用HTTP,而是使用一种更加安全的协议HTTPS HTTPS是 基于 HTTP,之前学习过的有关HTTP协议的

    2024年02月19日
    浏览(52)
  • FPGA如何根据原理图进行约束------(基础详细教程)

    目录 一、约束时钟引脚(如CLK) 二、约束与按键相连引脚(如RST) 首先我们需要找到晶振,时钟大多数由晶振产生。 打开原理图,晶振一般在原理图中使用大写“X”或“Y”开头。 1、单端时钟 下图是一个单端时钟,时钟频率一般会在原理图中标明。(若没有在原理图中标出

    2024年02月02日
    浏览(31)
  • CSS中如何实现背景图片的平铺和定位?

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包