У нас был подобный сценарий где интеграционный тест выполнялся на причальном сервере. Также нам нужен был комбинированный отчет для всей единицы тестирования и интеграции. Решение, которое мы реализовали, состояло в том, чтобы запустить размотанную пристань и передать jvmargs с деталями jacoco javaagent. В наших отчетах о покрытии кода были рассмотрены все остальные java-коды api и java-сервиса. П конфигурация для jacoco
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
<configuration>
<append>true</append>
</configuration>
<executions>
<execution>
<id>prepare-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>prepare-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
<propertyName>failsafeArgLine</propertyName>
</configuration>
</execution>
</executions>
</plugin>
С выше конфигурации мы получили общий EXEC файл как для блока и тестирования интеграции. Затем мы настроили причал для запуска-раздвоенного
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty-maven-plugin.version}</version>
<configuration>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<webApp>
<contextPath>/myway</contextPath>
<descriptor>src/main/webapp/WEB-INF/web.xml</descriptor>
</webApp>
<!-- passing the jacoco plugin as a jvmarg -->
<jvmArgs>${failsafeArgLine}</jvmArgs>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<configuration>
<daemon>true</daemon>
<waitForChild>false</waitForChild>
</configuration>
<goals>
<goal>run-forked</goal>
</goals>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
Это запустит причал в отдельной JVM с jvmargs. Наконец, мы сгенерировали отчет в теге отчетности pom. Мы заметили, что добавление отчета в плагины сборки не учитывало интеграционные тесты, выполняемые причалом.
<reporting>
</plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
<reportSets>
<reportSet>
<id>jacoco-report</id>
<reports>
<report>report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
Отчеты могут быть доступны на целевой/сайт/jacoco/index.html, попеременно вы можете запустить его из командной строки.
МВН jacoco: доклад
Надеется, что это помогает.
Из интереса: не могли бы вы объяснить, как вы выполняете тесты? Это работает автоматически или вам нужно вручную управлять причалом и вызывающим абонентом? – PepperBob
Ну, на данный момент у меня есть проект на основе Maven, который запускает Jetty с одним из веб-модулей. Охват кода выполняется в Jenkins с помощью плагина Sonar. Тесты JUnit 4.x. Если возможно, я думаю, мне нужно использовать JaCoCo. Должен ли я использовать какой-то плагин Maven для этого, или он будет подхвачен Sonar ...? – carlspring
Плагин JaCoCo Maven в проекте запустит агента, а действие Post-build Action в Jenkins станет инструментом Sonar. Вот как это работает здесь с Unit Tests. – PepperBob