2017-01-12 14 views
2

я следующая ошибка в моих тестовых powermock случаях при работе в Maven:@PowerMockIgnore на уровне проекта

java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer" 

Решение добавить аннотацию

@PowerMockIgnore("javax.management.*") 

Проблема в том, у меня есть много тестовых файлов где я должен добавить эту аннотацию.

Есть ли способ добавить это на уровне проекта или в maven?

Thanks

+0

Как вы нашли это «решение»? Потому что это больше похоже на обходное решение, чем решение ... – Line

+0

@Line Nopes :(В идеальном случае нам никогда не понадобится использовать PowerMock, если мы напишем наш код testable – abhig

+0

Но что такое «nopes»? Можете ли вы рассказать мне, где этот @PowerIgnore приходит от, как вы узнали об этом? – Line

ответ

1

Я не думаю, что это возможно.

Имейте в виду, что в конце концов это JUnit, выполняющий эти тестеры. По одному. И Юнит ничего не знает о проекте «maven».

JUnit знает только об элементах в классе тестирования, который он собирается обработать.

Таким образом: эти заявления должны находиться во всех ваших тестовых корпусах; в идеале, только в тех, которые действительно требуют этого.

Заключительное слово: пожалуйста, не поймите меня неправильно, но, на мой взгляд, ваша настоящая проблема заключается в том, что вы, похоже, используете PowerMock без разбора в своем проекте. Это может указывать на то, что многие из ваших разработчиков не знают, как написать testable код ... и затем они «исправят» это, обратившись к PowerMock. Существует определенный шанс, что вы скоро пожалеете, что рано или поздно.

Редактировать: для обучения написанию тестового кода --- начало here!

+0

Спасибо @GhostCat. Мы работаем над тем, чтобы сделать код более тестируемым. – abhig

+0

Добро пожаловать. Fyi - я добавил очень полезную ссылку, если вы хотите обучить своих людей, как сделать свой code more testable ;-) – GhostCat

+1

Thanks @GhostCat – abhig

1

С PowerMock 1.7.0 вы можете указать пакеты для игнорирования с помощью configuration file.

powermock.global-ignore="org.myproject.*"

Несколько пакетов/классы могут быть заданы с помощью запятой:

powermock.global-ignore="org.myproject.*","org.3rdpatproject.SomeClass"

Эта конфигурация применяется для всех тестов, что в пути к классам. Вы можете включить конфигурацию путем создания путем добавления этого файла в путь к классам:

org/powermock/extensions/configuration.properties