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 googleグループに投稿する方が良いかもしれません。https://groups.google.com/forum/#!forum/powermock – GhostCat