2016-10-30 6 views
1

У меня есть модульный тест, и я хочу получить результат покрытия кода в отчете. Когда я запускаю тесты с Maven, у меня есть в журналах:Почему плагин JaCoCo Maven пропускает отчет?

[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-unit-test) @ che-core-api-git --- 
[INFO] Skipping JaCoCo execution due to missing execution data file:C:\dev\eclipse_che_core\platform-api\che-core-api-git\target\coverage-reports\jacoco-ut.exec 

Это соответствующая часть моей POM.

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <executions> 
    <!-- 
     Prepares the property pointing to the JaCoCo runtime agent which 
     is passed as VM argument when Maven the Surefire plugin is executed. 
    --> 
    <execution> 
     <id>pre-unit-test</id> 
     <goals> 
     <goal>prepare-agent</goal> 
     </goals> 
     <configuration> 
     <!-- Sets the path to the file which contains the execution data. --> 
     <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile> 
     <!-- 
      Sets the name of the property containing the settings 
      for JaCoCo runtime agent. 
     --> 
     <propertyName>surefireArgLine</propertyName> 
     </configuration> 
    </execution> 
    <!-- 
     Ensures that the code coverage report for unit tests is created after 
     unit tests have been run. 
    --> 
    <execution> 
     <id>post-unit-test</id> 
     <phase>test</phase> 
     <goals> 
     <goal>report</goal> 
     </goals> 
     <configuration> 
     <!-- Sets the path to the file which contains the execution data. --> 
     <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile> 
     <!-- Sets the output directory for the code coverage report. --> 
     <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Почему плагин пропускает выполнение? Как я могу это исправить?

ответ

1

Первым шагом в предоставлении отчета о покрытии кода является запуск агента JaCoCo, который выполняется путем вызова цели плагина prepare-agent. Целью этой цели является:

Подготовка свойства, указывающего на агента времени выполнения JaCoCo, который может передаваться в качестве аргумента виртуальной машины тестируемому приложению. В зависимости от проекта типа упаковки по умолчанию свойства со следующим именем установлено:

  • tycho.testArgLine для упаковки типа eclipse-test-plugin и
  • argLine иначе.

Ваша текущая конфигурация правильно устанавливает destFile, который впоследствии используется report цели и ее параметра dataFile.

Проблема в том, что свойство, указывающее на агент JaCoCo, неправильно использовалось. Ваша конфигурация JaCoCo Maven плагин устанавливает параметр propertyName в surefireArgLine с

<propertyName>surefireArgLine</propertyName> 

Это означает, что JaCoCo будет хранить путь к его выполнению агенту в этой собственности, и что, когда Surefire Plugin является применением тестов, это свойство будет необходимо добавить к аргументам виртуальной машины. Однако плагин Surefire не использует surefireArgLine для добавления аргументов VM во время тестов; более конкретно, правый параметр называется argLine:

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

Таким образом, свойство surefireArgLine, что установка JaCoCo, указывающая на его агент, не используется во время испытаний. Чтобы это исправить, можно настроить Surefire плагин для рассмотрения этого нового свойства:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.19.1</version> 
    <configuration> 
    <argLine>${surefireArgLine}</argLine> 
    </configuration> 
</plugin> 

Это скажет Surefire плагину использовать новое свойство surefireArgLine в качестве аргументов VM при запуске тестов. С этим изменением, вы будете видеть в журналах:

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (post-unit-test) @ test --- 
[INFO] Analyzed bundle 'test' with 3 classes 

Обратите внимание, что по умолчанию, ничего из этого не требуется: как ранее сказано, JaCoCo магазины по умолчанию этот VM аргумент в argLine собственности, который является точно именем параметра Surefire Plugin, используемым для ввода пользовательских аргументов VM.Таким образом, еще одно решение было бы просто удалить элемент конфигурации

<propertyName>surefireArgLine</propertyName> 

, и пусть по умолчанию загнуться.

+0

Я сделал изменения, и теперь я ahve covergae-отчеты, но пуста, а также папка site jave index.html, но когда я его открываю, я не вижу никакого результата. – user1365697

+0

Я обновил pom.xml в вопросе – user1365697

+0

Я не получаю информацию сейчас, но также не получаю результатов – user1365697