前脚研究完 Mockito 中被 Mocked 的对象属性及方法的默认值, 虽然目今更多的是拥抱着 Mockito, 但总有时对 JMockit 也会挤眉弄眼,谁叫 JMockit 无所不能呢!被 Mockito 的 Mock 对象方法的默认返回值洗脑之后,进而觉察出 JMockit 应该有同样的实现方式。
经过类似的测试,这里不详细列出测试过程,只是在基于前篇的测试中加入 JMockit 的依赖,最新版是 1.36。测试类 MyClassTest 中使用
1 2 |
@Mocked private MyClass myClass; |
来构造 MyClass 的 mock 对象 myClass, 其余代码是一样的。相关代码请前往上篇 Mockito 中被 Mocked 的对象属性及方法的默认值 中找。 使用 JMockit 后跑出来的效果如下:
fields ----
integer: 0
array: null
double: null
string: null
optional: null
collection: null
map: null
methods ----
integer: 0
array: [J@64c64813
double: 0.0
string: null
optional: Optional.empty
collection: [], class java.util.Collections$EmptyList
map: {}, class java.util.Collections$EmptyMap
JMockit 对于属于默认值的处理没什么意外。被 Mock 的方法返回值也存在一个映射关系,那就是 jmockit.internal.util.DefaultValues.java, 点开链接,打开源码,看个究竟。其中的映射比 Mockito 还更为明白,此处拒绝贴出 DefaultValues 的源代码。