它使用反射API来模拟对象



Mockito用于模拟单元测试的对象。使用java反射API也可以做到这一点。这是否意味着Mockito是基于java的反射API实现的?

不,Mockito不使用java.lang.reflect.Proxy,它只在接口上工作。(即使是这样,我也会警惕"A可以用于B,这意味着库L将A用于B"的逻辑。)

为了允许更灵活的模拟,包括模拟具体类,Mockito使用以下命令为其模拟生成字节码:

  • CGLib/ASM/objesis for Mockito 2.0之前版本[source]
  • 从2.0起Mockito的ByteBuddy
  • DexMaker为Android Dalvik虚拟机创建.dex文件(从1.9.5开始)
  • 任意实现的MockMaker,以支持其他平台和包(自1.9.5)

为了它的价值,Mockito使用的CGLib Proxy类被设计为java.lang.reflect.Proxy.


旁注:Mockito肯定使用了Java的反射API,比如在InvocationOnMock.getMethod中引用Method对象。不过,这可能不是您所说的"用于模拟对象"。

相关内容

  • 没有找到相关文章

最新更新