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对象。不过,这可能不是您所说的"用于模拟对象"。