![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Mockito 实现原理系列
文章平均质量分 87
倪琛
程序员
展开
-
Mockito 实现原理(4):@Mock 注解
上篇文章 研究了一下 JUnit 的基础原理,这篇来看看 Mockito 和 JUnit 交界的部分: 注解。 注解可以看做一个语法糖,用更少的代码实现相同的 mock 功能。例如:这样声明 更为清晰直观,胜过在测试里写 ,特别是在许多测试方法中都要用到这样一个 mock 对象的时候。那为什么说 注解是 Mockito 和 JUnit 交界的部分呢?注意最上面那行 ,如果把这行去掉, 注解就失效了。(当然,还有别的方式也可以实现同样功能,比如增加 JUnit 的 注解。)毕竟, 注解需要由 Mock原创 2022-06-14 11:59:19 · 7401 阅读 · 0 评论 -
Mockito 实现原理(3):如何对 final 类进行 mock
前面两篇提到,Mockito 默认基于创建派生类(subclass)来实现 mock(包括 spy)。那么问题来了,如果我的类标记为 final,明确禁止创建派生类,那不就没法 mock 了吗?为了解决这个问题,Mockito 2 中引入了 。和前面讨论过的默认的 相比,这个 同样基于 Byte Buddy 这个提供 Java 字节码操作功能的第三方库,但会尽量不通过创建派生类来实现 mock。对 final 类进行 mock,需要用 替换掉默认的 。替换方法是通过创建一个配置文件。按照这篇教程,应该原创 2022-06-05 21:48:24 · 5444 阅读 · 0 评论 -
Mockito 实现原理(2):spy 的原理
上一篇讲了 的基本原理,这一篇简单谈谈 。可以这么理解这两者之间的区别: 的一个典型用法就是,你想测试某个对象 的某个方法 A,但 A 会调用它的另一个方法 B,而你想把 B mock 掉。这时候就可以基于 创建一个 ,然后把它的 B 方法 mock 掉就可以了。(注:本系列基于 Mockito 4.6.1 源码)可以看到,在创建 对象时,Mockito 会指定 作为 :这里的 并非一个字符串,而是某个对象。总之就是,根据这个配置,在对 mock 对象进行方法调用时,默认会执行真正的方法,而不原创 2022-06-04 19:06:33 · 701 阅读 · 0 评论 -
Mockito 实现原理(1):基本原理
最近开始读 Mockito 的源码,还挺有意思。先简单说说它的基本原理吧!(注:本系列基于 Mockito 4.6.1 源码)Mockito 最基本的用法就是 mock 一个对象,然后在调用其方法时返回指定结果。以一段最简单的代码为例:这个效果是如何实现的呢?事实上,Mockito 提供了不止一种方法来实现上面的 mock 效果。在 中定义了一个 接口:这个接口有好多个实现类。目前我执行时发现,默认用的是 这个实现,所以下面就讨论该实现的具体步骤。第一行调用 时, 首先会做的就是创建一个 moc原创 2022-06-03 20:30:26 · 1463 阅读 · 0 评论