如何在第三方库中模拟对类的静态调用

时间:2013-03-11 08:57:39

标签: java testing mocking powermock proxy-classes

我想知道是否可以使用PowerMock或任何其他库来模拟库中类的静态调用。该第三方库中的类调用了rt.jar中的一个类,我希望返回一个返回Type的自定义实现。我试图在测试代码之外做这个。

否则,我不得不从该库扩展一些类并替换一些实现。有人做过这样的事吗?

2 个答案:

答案 0 :(得分:0)

是的,有可能,例如如果您只想模拟一个方法,请使用PowerMock.mockStatic()PowerMock.mockStaticPartial()

PowerMock的主页上有一个非常好的教程。

我发布了an example on SO

[编辑]如果你想在生产代码中做这样的魔术,我建议不要使用测试框架。也许Groovy可以帮助你 - Groovy可以在运行时操作类(甚至是JDK类),而且它(我认为)是JVM之上的一个更薄的层。

答案 1 :(得分:0)

一般来说,做这样的硬核短信是非常糟糕的(它不是嘲笑你描述的内容)。我会在这个库上构建一个小抽象,这样你就可以完全控制你想要返回的内容。可以使用PowerMock外部测试的一些功能,但这不是一块蛋糕。这里有粗略的描述,如果你真的需要可以提供帮助:https://groups.google.com/d/msg/powermock/SMDMe-y6fLg/1HF0TsGOqTIJ

无论如何,我不建议这样做。