2011-03-23 106 views
8

由于我做了一些研究,我已经发现,PowerMock能够嘲笑静态Java方法。嘲讽静态方法

有人能解释(技术上)什么是PowerMock比JUnit和其他以致不能或不会做的有什么不同?另外,为什么静态方法试图模拟时会引起问题?

感谢

回答

12

http://blog.jayway.com/2009/05/17/mocking-static-methods-in-java-system-classes/

为了嘲笑实例方法,你可以简单地覆盖它的子类。你不能用静态方法来做,因为没有“静态多态性”。

Powermock能做到这一点,因为它与字节码的工作,而其他流行的框架依靠多态性与创建CGLIB子类。

来自链接:“基本上所有标准的模拟框架都使用CGLib创建一个模拟对象,这意味着它们基于分层模型(CGLib创建了一个类的子类,以在运行时测试这是实际的模拟对象),而不是PowerMock通过委托给MockGateway进行字节码操作的代理模型。“