2016-11-22 16 views
2

У меня возникает проблема с издевательским статическим тестом с моим кодом, скомпилированным с Java7.Проблема PowerMock при издевательском статическом методе с конструкцией Java7

Я аннотирования мой JUnit тест с аннотациями

@RunWith(PowerMockRunner.class) 
@PrepareForTest(StaticClassToMock.class) 

При запуске моего теста и попытаться дразнить мой статический класс с

PowerMockito.mockStatic(StaticClassToMock.class); 

возвращает

java.lang.VerifyError: JVMVRFY012 stack shape inconsistent [...] 

Если при StaticClassToMock Я удаляю конструкции Java7, заменяя зацепившиеся исключения в OR и ставя t Подол в каскаде это прекрасно работает.

Я видел, что последняя версия Powemock (1.6.6) скомпилирована с Java6.

Является ли мой вопрос, связанный с Java7 конструкций при PowerMock скомпилирован с Java6?

Благодаря

ответ

1

Это вещь с PowerMock - добро пожаловать в его странных ошибок.

Первый вопрос: вы используете IBM JDK? Потому что IBM JDK и PowerMock идут еще более «странно», чем Oracle/OpenJDK и PowerMock.

Если вы делаете некоторый поиск, есть много потенциальных намеки вокруг:

  1. VerifyError on WAS
  2. Code not working with Java7

Во всяком случае, первый ответ был бы: просто попробовать, если работает ваш JVM с помощью -noverify имеет значение.

Более длинный ответ: если вы не тестируете сторонний код, который вы не можете изменить; рассмотрите ... не используя статический код так, чтобы вы обращались к PowerMock.

Вы видите, статический является, прежде всего, ненормальности на хороший дизайн OO. Его следует использовать с большой осторожностью; так как он вставляет много прямого соединения в ваш код. И просто сказал: используя static - один из простых способов создать код, который трудно/невозможно проверить! Таким образом, если вы изменили свой код, вы можете посмотреть эти videos, чтобы узнать, как создать testable код в первую очередь. И тогда ваша потребность обратиться к PowerMock ... просто исчезнет.

Мои личные два цента: я потратил много часов на поиски таких проблем PowerMock. Затем мы решили сделать разные проекты, которые разрешают только статический контент, который не нарушает наши обычные модульные испытания. С тех пор мы живем хорошо с EasyMock и Mockito.Больше нет необходимости в PowerMock; больше не нужно тратить часы на отладочные проблемы, у которых ничего не было, чтобы сделать с нашим производственным кодом; но только насмешливые рамки.

+0

Благодарим вас за разъяснение GhostCat, я полностью согласен с вашими вопросами о статическом коде и IBM JDK. Я, к сожалению, расширяю код IBM и не могу изменить существующий. Так или иначе, мне удалось решить этот вопрос: это было из библиотеки старых журналистов. Модернизировав его до более нового, я решил проблему. Большое спасибо! – flavio

+1

Добро пожаловать; спасибо за ваше обновление! – GhostCat