模拟静态方法

add*_*dd9 9 java static mocking powermock

正如我做了一些研究,我发现PowerMock能够模拟静态java方法.

有人可以解释(技术上)什么是PowerMock与JUnit不同的东西以及其他不能或不能的东西?还有为什么静态方法在尝试模拟时会导致问题?

谢谢

Kon*_*rus 13

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

为了模拟实例方法,您可以简单地在子类中覆盖它.你不能用静态方法做到这一点,因为没有"静态多态".

Powermock可以做到这一点,因为它使用字节码,而其他流行的框架依赖于多态并使用CGLIB创建子类.

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