Мультимодульная установка maven jacoco для интеграционных тестов - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть установка maven с несколькими модулями, установка выглядит примерно так

root module
  - domain module 
  - repository module 
  - service module 
  - controllers module

Jacoco правильно генерирует тестовое покрытие из юнит-тестов, а сонар показывает правильный процент (скажем, 20%).Surefire используется для модульных тестов.

Для интеграционных тестов это более сложно, мы используем отказоустойчивые и интеграционные тесты генерируют файл jacoco-it.exec, который сканируется с помощью сонара.Моя проблема заключается в том, что интеграционные тесты расположены в controllers module и показывают только тестовое покрытие интеграционных тестов для классов, которые находятся внутри контроллеров, а не для классов, которые находятся в другом модуле, таком как сервисный модуль.Из-за этого общее тестовое покрытие с интеграционными тестами увеличивается примерно до 21% вместо 35 +%.

Можно ли настроить сонар и jacoco для измерения тестового покрытия с интеграционными тестами всех классов вместо классов только из одного модуля, если интеграционные тесты находятся в controllers module?

Для справки, это соответствующая настройка

<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
    <execution>
        <id>pre-unit-test</id>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
        <configuration>
            <destFile>${project.build.directory}/jacoco.exec</destFile>
            <propertyName>surefireArgLine</propertyName>
        </configuration>
    </execution>

    <execution>
        <id>pre-integration-test</id>
        <phase>pre-integration-test</phase>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
        <configuration>
            <destFile>${project.build.directory}/jacoco-it.exec</destFile>
            <propertyName>failsafeArgLine</propertyName>
        </configuration>
    </execution>
</executions>
</plugin>

Я запускаю свои тесты с mvn verifyи сканер с mvn sonar:sonar

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете объединить свои отчеты о покрытии, записав их все в один и тот же файл назначения.

Например, в настоящее время мы охватываем только модульные тесты в наших многомодульных проектах, поэтому наш родительский pom содержит:

<properties>
    ...
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    ...
</properties>

и

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <configuration>
                <destFile>${sonar.jacoco.reportPath}</destFile>
                <append>true</append>
            </configuration>
            <inherited>true</inherited>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

В результате получается единый агрегированный отчет для всех модулей.

Я ожидаю, что аналогичный шаблон может быть применен к вашему ИТ-специалисту jacoco.конфигурации.

...