Я использую Maven 3.0.3, JUnit 4.8.1 и Jacoco 0.6.3.201306030806 и пытаюсь создать отчеты о тестовом покрытии.
У меня есть проект только с модульными тестами, но я не могу запустить отчеты, я постоянно получаю сообщение об ошибке: Skipping JaCoCo execution due to missing execution data file
когда я запускаю:
mvn clean install -P test-coverage
Вот как настроен мой пом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx2048m</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
...
<profile>
<id>test-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<configuration>
<destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
<datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
</configuration>
<executions>
<execution>
<id>prepare-unit-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- prepare agent for measuring integration tests -->
<execution>
<id>prepare-integration-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<propertyName>itCoverageAgent</propertyName>
</configuration>
</execution>
<execution>
<id>jacoco-site</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Все мои тесты проходят успешно. Вот некоторые из результатов работы Maven:
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-unit-tests) @ myproject ---
[INFO] argLine set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
...
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0
[INFO]
...
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-integration-tests) @ myproject ---
[INFO] itCoverageAgent set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (default) @ myproject ---
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:verify (default) @ myproject ---
[INFO] Failsafe report directory: /Users/davea/Dropbox/workspace/myproject/target/failsafe-reports
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (jacoco-site) @ myproject ---
[INFO] Skipping JaCoCo execution due to missing execution data file
[INFO]
Есть идеи, какая конфигурация мне не хватает?
destFile
удалили файл и позволили ему писать в файл target / jacoco.exec по умолчанию.Ответы:
jacoco-Maven-плагин: 0.7.10-SNAPSHOT
От jacoco: подготовить агент, который говорит:
Обратите внимание на
@{argLine}
то, что добавлено в-your -extra -arguments
.Спасибо Славе Семушину за то, что заметил изменение и сообщил в комментарии .
jacoco-Maven-плагин: 0.7.2-SNAPSHOT
После jacoco: приготовить агент, который говорит:
вы должны изменить следующую строку в
maven-surefire-plugin
конфигурации плагина (обратите внимание на${argLine}
внутреннюю часть<argLine>
):в
Также внесите необходимые изменения в другой плагин
maven-failsafe-plugin
и замените следующее (опять же, обратите внимание на${argLine}
):в
источник
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. Я не объявляю maven-surefire-plugin явно и не устанавливаю конфигурации. Я просто добавляю заполнитель argLine в командную строку maven, напримерmvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Теперь создается файл jacoco.exec и в сонаре создается отчет о покрытии.Я столкнулся с немного другой проблемой, которая вернула ту же ошибку.
По правде говоря, эта ошибка возвращается по многим-многим причинам. Мы экспериментировали с различными решениями на Stack Overflow, но сочли этот ресурс лучшим. Это разрушает множество различных потенциальных причин, по которым Жакоко может возвращать ту же ошибку.
Для нас решением было добавить в конфигурацию подготовительный агент.
Я предполагаю, что большинство пользователей испытают это по разным причинам, поэтому взгляните на вышеупомянутый ресурс!
источник
**/*Test.java
когда были названы мои тестовые классы*Tests.java
*Test.java
класс и один тестовый метод,@Test
помеченный, чтобы Джакоко мог что-то делать. 2. Переменные среды Travis для моего проекта, в которых была опечаткаSONART_TOKEN=*****
, должны были быть названыSONAR_TOKEN=*****
. См. Здесь документы Travis, выполните поиск по запросуor define SONAR_TOKEN in your Repository Settings
. После того, как я это исправил, сборка прошла успешно. Вы можете просмотреть мой проект на gitbhub, о котором идет речь .Возможен случай, когда какая-либо другая настройка argline или плагин в pom может переопределять настройку порядка выполнения jacoco.
argLine установлен в -
javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
Один из примеров
После избавления от argLine из этих плагинов jacoco стал нормально работать.
источник
Также может появиться ошибка «Пропуск выполнения JaCoCo из-за отсутствия файла данных выполнения» из-за отсутствия тестов в проекте. Например, когда вы запускаете новый проект и вообще не имеете файлов * Test.java.
источник
Что сказал tdrury:
измените конфигурацию вашего плагина на это:
Изменить: только что заметил одну важную вещь, destFile и dataFile кажутся чувствительными к регистру, поэтому он должен быть destFile, а не destfile.
источник
Я знаю, что этот вопрос довольно старый, но если кто-то вроде меня придет сюда в поисках ответа, это может помочь. Я смог преодолеть указанную выше ошибку.
1) Удалите приведенный ниже фрагмент кода из плагина maven-surefire-plugin
2) Добавьте цель ниже:
источник
Только что столкнулся с той же проблемой.
У меня есть класс с именем
HelloWorld
, и я создал для него тестовый класс с именемHelloWorldTests
, затем я получил результатSkipping JaCoCo execution due to missing execution data file.
Затем я попытался изменить свой
pom.xml
чтобы он работал, но попытка не удалась.Наконец, я просто переименовал
HelloWorldTests
вHelloWorldTest
, и это сработало!Итак, я предполагаю, что по умолчанию jacoco распознает только тестовый класс с именем like
XxxTest
, что указывает на то, что это тестовый класс дляXxx
. Так что просто переименуйте свои тестовые классы в этот формат, чтобы работать!источник
Я перепробовал все ответы, но мне сработала только следующая комбинация советов. Зачем? У меня были очень специфические требования:
mvn clean verify
(Maven 3.6.0)javaagent
определенного вsurefire
плагинеРешение - добавьте
argLine
значение вsurefire
конфигурацию со свойством maven "поздняя замена",@{...}
как описано вsurefire
FAQ ( моя фиксированная конфигурация )Неудачная первая попытка - определите свойство jaCoCoArgLine в
prepare-agent
целевой конфигурацииjacoco
- сценарий провалил мое второе требование, IntelliJ IDEA не смогла определить агент для jmockit, который я использую в проекте для имитации статического методаисточник
Я добавил проект Maven / Java с 1 классом домена со следующими функциями:
Где результаты Жакоко? После тестирования и запуска «mvn clean» вы можете найти результаты в «target / site / jacoco / index.html». Откройте этот файл в браузере.
Наслаждайтесь!
Я старался сделать проект максимально простым. Проект объединяет множество предложений из этих сообщений в пример проекта. Спасибо, участники!
источник
Я боролся несколько дней. Я пробовал все различные конфигурации, предложенные в этой теме. Ни один из них не работает. Наконец, я считаю, что только важная конфигурация - это цель агента подготовки . Но вы должны поместить это в правильную фазу. Я видел так много примеров, помещающих его в « предварительный интеграционный тест », что вводит в заблуждение, так как он будет выполнен только после модульного теста. Таким образом, модульный тест не будет инструментирован.
Правильная конфигурация должна просто использовать фазу по умолчанию (не указывайте фазу явно). И обычно вам не нужно копаться в maven-surefire-plugin .
источник
При выполнении говорится, что данные jacoco помещаются в /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec, но ваша конфигурация maven ищет данные в $ {basedir} / target / cover-reports / jacoco-unit. Отв.
источник
Мой ответ очень запоздал, но для других пользователей. В вашем случае вам необходимо настроить отказоустойчивое подключение, чтобы использовать конфигурацию агента командной строки, сохраненную в переменной itCoverageAgent. Например
В вашей конфигурации maven jacoco подготавливает аргументы командной строки на этапе подготовки агента, но отказоустойчивый плагин не использует его, поэтому файл данных выполнения отсутствует.
источник
Попробуй использовать:
чтобы увидеть подробную информацию о вашем процессе отчетности.
Я сконфигурировал свой jacoco так:
Затем
mvn jacoco:report -debug
показывает его с использованием конфигурации по умолчанию, что означает, чтоjacoco.exec
его нет~/jacoco.exec
. Ошибка говоритmissing execution data file
.Так что просто используйте конфигурацию по умолчанию:
И все отлично работает.
источник
Иногда выполнение запускается в первый раз, и когда мы выполняем чистую установку maven, после этого он не генерируется. Проблема заключалась в использовании true для свойств skipMain и skip в maven-compiler-plugin основного файла pom. Удалите их, если они были представлены как часть какой-либо проблемы или предложения.
источник
В моем случае агент подготовки имел другую
destFile
конфигурацию, но, соответственно, отчет должен был быть настроен с помощьюdataFile
, но эта конфигурация отсутствовала. Как толькоdataFile
был добавлен, он начал работать нормально.источник