JaCoCo проверить цель для интеграционных тестов
Я считаю, что плагины JaCoCo Maven check
Цель не поддерживает интеграционные тесты в многомодульном проекте (где интеграционные тесты находятся в модуле, отличном от тестируемого кода).
У меня есть проект со следующей структурой:
service
├── webapp
├── lib1
├── lib2
└── integration-test
webapp
зависит от lib1
а также lib2
и строит на войну, integration-test
использует контейнер в памяти для запуска webapp
и выполнить тесты против него.
Моя конфигурация такова, что JaCoCo успешно генерирует консолидированные файлы данных (jacoco.exec
а также jacoco-it.exec
в service/target/
) для юнит-тестов в { webapp
, lib1
, lib2
} И покрытие интеграционных тестов для тестов, запущенных в integration-test
,
При добавлении в конфигурации для check
Я получаю этот вывод из плагина.
[INFO] --- jacoco-maven-plugin:0.7.8:check (default-check) @ integration-test ---
[INFO] Skipping JaCoCo execution due to missing classes directory:/home/mark/workspace/service/integration-test/target/classes
Ошибка точная, так как integration-test
Модуль имеет только тестовый источник, поэтому нет target/classes
каталог. Добавление исходного каталога не помогло, check
не удалось указать покрытие 0%, потому что в target/classes
каталог. Из этого (и глядя на источник чека Mojo) кажется, check
цель требует classes
каталоги всех модулей, которые он использует (webapp
, lib1
, lib2
).
Такой конфигурации не существует в check
что позволяет мне указать, где classes
каталоги и не похоже, что он поддерживает такую функцию, глядя на источник.
Корень / родитель pom.xml
<properties>
<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
<-- Note, I am using build/plugins/plugin - not build/pluginManagement/plugin
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<id>agent-for-ut</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<append>true</append>
<destFile>${sonar.jacoco.reportPath}</destFile>
</configuration>
</execution>
<execution>
<id>agent-for-it</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<append>true</append>
<destFile>${sonar.jacoco.itReportPath}</destFile>
</configuration>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
<phase>verify</phase>
<configuration>
<dataFile>${sonar.jacoco.itReportPath}</dataFile>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.9800</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
integration-test pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<skipTests>${skipTests}</skipTests>
<argLine>${argLine} -Duser.timezone=UTC -Xms256m -Xmx256m</argLine>
<reuseForks>false</reuseForks>
</configuration>
</execution>
</executions>
</plugin>