Mockito如何模拟界面?

时间:2014-04-04 16:03:34

标签: mockito cglib dynamic-proxy

我认为 Mockito 通过使用动态代理来模拟界面。

然后我注意到调试时Mockito模拟接口的类型:

MyInterface$$EnhancerByMockitoWithCGLIB$$9654c88

表示使用 CGLIB 而不是动态代理。

有人可以:

  • 澄清我的讯问
  • 将我指向Mockito的相关源代码位置

2 个答案:

答案 0 :(得分:1)

Mockito允许MockMaker的可互换实现,但默认情况下,实现是基于CGLibCglibMockMaker

有关CGLib和标准Proxy对象之间差异的在线讨论("The Power of Proxies in Java""What is the difference between JDK dynamic proxy and CGLib?");在模拟接口时,似乎Proxy完全没问题,但是使用CGLib可以访问带有实现的模拟实际类,并且在严格必要时提交CGLib可能会使代码更容易理解。

答案 1 :(得分:1)

在mockito-core模块的源代码中(我使用的是版本1.9.5),如果你遵循使用MockMaker的代码(其中模块中唯一的实现是CglibMockMaker) ,你会看到你到达一个名为ClassImposterizer的班级。这个类包含一些Cglib魔法(正如评论明确指出的那样)。此外,您可以清楚地看到在私有方法Enhancer

中使用Cglib createProxyClass