我試圖用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