Я пытаюсь издеваться над статическим методом с помощью EasyMock + PowerMock. Если я не издеваюсь над статическим методом, то получаю исключение java.lang.ExceptionInInitializerError, но с другой трассировкой стека, которая связана исключительно с моими кодовыми файлами, и ошибка очевидна. Однако, если я издеваюсь над статическим методом с помощью EasyMock + PowerMock, строка PowerMock.mockStaticNice (Classname.class) генерирует одно и то же исключение, но с другой трассировкой стека. Трассировка стека является:
java.lang.ExceptionInInitializerError при издевательском статическом методе с использованием 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)
............................
линия 125 является PowerMock.mockStaticNice (Classname.class)
Я уже пробовал это:
1) Упоминание имя класса, содержащий статический метод в PrepareForTest ({class1.class, class2.class, class3.class})
2) Мокетные статические методы в @ Перед аннотацией.
Я застрял в этой проблеме последние 2 дня. Просьба предложить решения.
Только для записи: вы понимаете, что * статический * - это ненормальность, которую просто следует избегать в хороших конструкциях OO? И сюрприз: никаких статических вызовов, нет необходимости в PowerMock. – GhostCat
Я понимаю это. Но я просто редактирую чей-то предыдущий код, поэтому у меня нет никакого выбора, кроме издевательского статического метода. – Siddharth
Ну, вы можете ** добавить ** класс интерфейса/оболочки и изменить статический вызов на использование этой оболочки; но конечно; который несет определенный риск; и в этом случае это, вероятно, не стоит усилий. В этом смысле: я редко вижу здесь ответы, которые действительно говорят «вот как вы его работаете с powermock»; так что, возможно, вам лучше отправляться в группу Google Powermock: https://groups.google.com/forum/#!forum/powermock – GhostCat