我试图用EasyMock + PowerMock来嘲笑静态方法。如果我不嘲笑静态方法,那么我得到异常java.lang.ExceptionInInitializerError,但有一个不同的堆栈跟踪,这纯粹是由于我的代码文件,错误是显而易见的。但是,如果我使用EasyMock + PowerMock来嘲弄静态方法,则PowerMock.mockStaticNice(Classname.class)行会引发相同的异常,但会使用不同的堆栈跟踪。堆栈跟踪是:
当使用EasyMock + PowerMock嘲弄静态方法时发生java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:386)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:175)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:114)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:88)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:79)
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212)
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163)
at org.powermock.api.easymock.PowerMock.mockStaticNice(PowerMock.java:331)
at PackageName(ClassName.java:125)
............................
的线125是PowerMock.mockStaticNice(Classname.class)
我已经尝试这样的:
1)提到含有PrepareForTest静态方法类名({class1.class,class2.class,class3.class})
2)在@Before注释中模拟静态方法。
我被这个问题困住了最后2天。请提出解决方案。
只是为了记录:你明白*静态*是一个异常,应该避免在良好的OO设计中出现?和惊喜:没有静态调用,不需要PowerMock。 – GhostCat
我明白这一点。但是我只是编辑某人以前的代码,所以除了嘲弄静态方法之外,我没有任何其他选择。 – Siddharth
那么,你可以**添加一个接口/包装类,并改变静态调用来使用该包装;但是当然;存在一定风险;在这种情况下,这可能是不值得的。从这个意义上说:我很少在这里看到真正的答案:“这就是你如何使它与powermock一起工作”;所以也许你最好把它发布到Powermock谷歌组:https://groups.google.com/forum/#!forum/powermock – GhostCat