繁体   English   中英

使用EasyMock + PowerMock模拟静态方法时的java.lang.ExceptionInInitializerError

[英]java.lang.ExceptionInInitializerError when mocking static method using EasyMock+PowerMock

我试图使用EasyMock + PowerMock模拟静态方法。 如果我不嘲笑静态方法,那么我得到异常java.lang.ExceptionInInitializerError但是具有不同的堆栈跟踪,这纯粹是由于我的代码文件而且错误是显而易见的。 但是,如果我使用EasyMock + PowerMock模拟静态方法,则PowerMock.mockStaticNice(Classname.class)行会抛出相同的异常但具有不同的堆栈跟踪。 堆栈跟踪是:

 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天遇到了这个问题。 请提出解决方案。

正如我从你的解释中所理解的那样,在类的静态初始化期间抛出ExceptionInInitializerError 我得出了这样的结论,因为根据stacktrace, PowerMock.mockStaticNice(Classname.class)行是加载类Classname的第一个地方。

在这种情况下,您必须使用@SuppressStaticInitializationFor( PackageName.ClassName`)。 您可以在PowerMock文档中找到更多信息: 抑制不需要的行为

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM