正如我做了一些研究,我发现PowerMock能够模拟静态java方法。
有人能解释(技术上)什么是PowerMock与JUnit不同的东西和其他不能或不能的东西?还有为什么静态方法在尝试模拟时会引起问题?
感谢
答案 0 :(得分:13)
http://blog.jayway.com/2009/05/17/mocking-static-methods-in-java-system-classes/
为了模拟实例方法,您可以简单地在子类中覆盖它。你不能用静态方法做到这一点,因为没有“静态多态”。
Powermock可以做到这一点,因为它适用于字节码,而其他流行的框架依赖于多态并使用CGLIB创建子类。
从链接:“基本上所有标准的模拟框架都使用CGLib来创建一个模拟对象,这意味着它们基于一个层次模型(CGLib创建一个类的子类来在运行时测试,这是实际的模拟对象)而不是PowerMock通过委托给MockGateway的字节码操作来使用的委托模型。“