Проблема с PowerLock ECLEmma

Мы используем EasyMock и PowerMock с JUnit. Используемый инструмент покрытия – ECLEmma. С EasyMock он правильно показывает покрытие в зеленом (как описано). Тем не менее, для кода, который был протестирован модулем с PowerMock, покрытие отображается красным цветом (непокрытым). Читали похожие вопросы в Интернете. Однако просто хотел проверить, есть ли решение для этого.

благодаря
Venkatesh

Это известная проблема: https://github.com/jayway/powermock/issues/422

И это было давно, оно не будет исправлено в ближайшее время.

Я предлагаю вам вместо этого использовать eCobertura .

Да, есть решение для этого:

Сначала вам придется добавить эту зависимость maven:

 ` org.powermock powermock-module-junit4-rule-agent 1.6.4 test ` 

Затем вместо использования этой annotations @RunWith (PowerMockRunner.class) просто добавьте @Rule в class Test следующим образом:

 public class Test { @Rule public PowerMockRule rule = new PowerMockRule(); 

вы можете найти больше в этом блоге. Сделать покрытие EclEmma тестовым покрытием с помощью PowerMock

В большинстве случаев это работало в моем проекте:

 @Rule public PowerMockRule rule = new PowerMockRule(); static { PowerMockAgent.initializeIfNeeded(); } 

Удалить / Комментировать @RunWith(PowerMockRunner.class) & включить следующие powermock-module-javaagent-1.6.5.jar после добавления powermock-module-javaagent-1.6.5.jar в свой powermock-module-javaagent-1.6.5.jar к classам:

 import org.junit.Rule; import org.powermock.modules.junit4.rule.PowerMockRule; import org.powermock.modules.agent.PowerMockAgent; 

Теперь щелкните правой кнопкой мыши-> Покрытие As-> Конфигурации покрытия и добавьте следующие строки в Аргументы:

 -ea -noverify -javaagent:path/to/powermock-module-javaagent-1.6.5.jar 

Нажмите «Применить-> Охват».

Также обратите внимание, что @Before не работает в этом случае, поэтому вам нужно добавить все материалы в методах, отмеченных с помощью @Test методом, помеченным знаком @Before .

У нас есть статические classы, чтобы насмехаться. С издевательскими статическими classами плагин eclEmma для покрытия кода не работает в Eclipse. Итак, что мы сделали, поэтому разместил @RunWith (JUnit4.class) (вместо @RunWith (PowerMockRunner.class)) перед classом и разместил следующие строки внутри classа

 static { PowerMockAgent.initializeIfNeeded(); } @Rule public PowerMockRule rule = new PowerMockRule(); 

Скомпилировал class и запустил тестовый class. Покрытие кода работает для classа. Это изменение происходит только в среде Eclipse.

После написания тестовых примеров мы вернули код в норму. Разместил @RunWith (PowerMockRunner.class) вместо @RunWith (JUnit4.class) и прокомментировал выше статические коды и строки powermockrule.

Мне удалось создать покрытие PowerMock с помощью Jacoco, используя powermock-module-javaagent .

Просто убедитесь, что вы положили агент powermock после jacoco-агента:

 maven-surefire-plugin  true ${jacocoArgLine} -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/${powermock.version}/powermock-module-javaagent-${powermock.version}.jar -noverify ... 

Если вы хотите увидеть пример, посмотрите на этот проект: https://github.com/jfcorugedo/sonar-scanner

Здесь вы можете увидеть, что сонар учитывает статические методы и new заявления, высмеиваемые PowerMock:

введите описание изображения здесь

Если вы хотите PowerMockRule new заявления, убедитесь, что вы используете PowerMockRule вместо PowerMockRunner .

Взгляните на этот тест

Для издевательских статических classов использование @RunWith(PowerMockRunner.class) и запуск «Coverage As JUnit Test» на Eclipse показывает скрытый код как непокрытый, и это явно похоже на проблему.

Чтобы добавить к решениям выше, в проекте maven, вы можете попробовать это.

В корне pom.xml для генерации отчета добавьте html в качестве формата в cobertura-maven-plugin . Ниже это выглядит так.

  org.codehaus.mojo cobertura-maven-plugin   html xml    

Затем перейдите в модуль, в котором находится ваш class, и откройте файл target/site/cobertura/index.html в Eclipse Web Browser или по вашему выбору. Здесь вы можете найти информацию о покрытии.

  • Класс не найден с Ant, Ivy и JUnit - ошибка в build.xml?
  • Заполнение пружины @ Value во время модульного теста
  • Тестирование пустот методом JUNIT
  • Встроенный MongoDB при выполнении интеграционных тестов
  • Как установить параметры JVM для тестов Junit Unit?
  • Как запустить все тесты JUnit в категории / комплекте с Ant?
  • Как исключить classы AutoConfiguration в тестах Spring Boot JUnit?
  • Как проверить, что исключение не выбрасывается?
  • Сравните два объекта JSON в Java
  • Когда для генерации Java требуется вместо и есть ли недостаток переключения?
  • Как выполнить повторный запуск неудачных тестов JUnit?
  • Interesting Posts
    Давайте будем гением компьютера.