9

当我进行一些研究时,我发现 PowerMock 能够模拟静态 Java 方法。

有人可以(从技术上)解释 PowerMock 与 JUnit 和其他不能或不能做的不同之处吗?还有为什么静态方法在尝试模拟时会引起问题?

谢谢

4

1 回答 1

13

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

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

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

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

于 2011-03-23T08:23:34.227 回答