如何使用junit和easymock来模拟静态方法
问题描述:
问题是:我需要测试方法methodTest()私有类。 methodTest()调用静态方法staticExternal()来自外部库。 如何更换staticExternal()在mockLocal(),如果我使用jMock和EasyMock的,但类包含staticExternal()没有界面?如何使用junit和easymock来模拟静态方法
P.S. PowerMock不能使用。
答
就我所知,你不能。基本上这个代码很难测试。您应该考虑提取一个依赖项,其中该依赖项的“正常”实现将调用静态方法。
基本上,静态方法调用很难精确替换,因为它们是静态的。像PowerMock这样的工具必须为Java拦截静态方法调用而烦恼(替换类加载器等)。在我看来,它是通常更好地重构你的代码,以便它可以测试没有这样的事情。
可能这个问题已经在[这些]中回答了(http://stackoverflow.com/questions/3162551/how-do-i-mock-static-methods-in-a-class-with-easymock)[two ](http://stackoverflow.com/questions/218813/jmock-mocking-a-static-method) – 2013-03-06 14:15:19
为什么你拒绝PowerMock,当它是简单和正确的解决方案,你有问题?如果你想要一个有限的答案,你必须解释原因。 – 2013-03-06 17:24:21
@AndrewAylett我知道PowerMock是一个很好的框架。不幸的是,我有这样的练习。谢谢大家! – blackhard 2013-03-06 17:54:09