Ich versuche, statische Methode mit EasyMock + PowerMock zu verspotten. Wenn ich die statische Methode nicht vortäusche, dann bekomme ich die Ausnahme java.lang.ExceptionInInitializerError aber mit einem anderen Stack-Trace, der rein auf meine Code-Dateien zurückzuführen ist und der Fehler ist offensichtlich. Wenn ich jedoch die statische Methode mit EasyMock + PowerMock mokiere, löst die Zeile PowerMock.mockStaticNice (Classname.class) dieselbe Ausnahme aus, aber mit einem anderen Stack-Trace. Der Stack-Trace ist:
java.lang.ExceptionInInitializerError beim Mocking statische Methode mit EasyMock + PowerMock
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)
............................
Die Linie 125 ist PowerMock.mockStaticNice (ClassName.class)
ich dies bereits versucht haben:
1) Klassennamen enthält statische Methode in PrepareForTest Erwähnen ({class1.class, class2.class, class3.class})
2) Mock statische Methoden in @Before Annotation.
Ich bin mit diesem Problem für die letzten 2 Tage fest. Bitte schlagen Sie Lösungen vor.
Nur für den Rekord: Sie verstehen, dass * statische * ist eine Anomalie, die einfach in guten OO-Designs vermieden werden sollte? Und Überraschung: keine statischen Anrufe, keine Notwendigkeit für PowerMock. – GhostCat
Ich verstehe das. Aber ich bearbeite nur den vorherigen Code von jemandem, also habe ich keine andere Möglichkeit als die statische Methode zu verspotten. – Siddharth
Nun, Sie könnten ** ** eine Interface/Wrapper-Klasse hinzufügen und den statischen Aufruf ändern, um diesen Wrapper zu verwenden; aber natürlich; das birgt ein gewisses Risiko; und in diesem Fall ist es wahrscheinlich nicht die Mühe wert. In diesem Sinne: Ich sehe hier selten Antworten, die wirklich sagen "So funktioniert es mit powermock"; Vielleicht solltest du also besser in die Powermock Google Group posten: https://groups.google.com/forum/#!forum/powermock – GhostCat