Подтвердить что ты не робот

Объединение интеграции и Unit test отчетов с помощью JaCoCo

Я создаю отказоустойчивые и надежные отчеты с maven с плагином JaCoCo, но я могу только получить их в отдельных отчетах. Я хотел бы иметь общий охват (слияние между модульными тестами и интеграционными тестами).

После того, как я думаю, был тщательный поиск Google, я мог найти способ сделать это с помощью Sonar. Есть ли более простой способ сделать это?

Связанный вопрос: Maven отдельный Unit Test и тесты интеграции

4b9b3361

Ответ 1

Вы должны ознакомиться с документацией плагина JaCoCo Maven, который содержит цель merge.

Ответ 2

Не тот ответ, который вы ищете, но все же...

В большинстве случаев вы не должны объединять охват от тестов на единицу и интеграции.

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

Значение ваших интеграционных тестов заключается в том, что они гарантируют правильную работу основных приложений вашего приложения и правильную интеграцию всего пакета. Вы должны стараться иметь высокий функциональный охват для ваших интеграционных тестов. (Но довольно сложно измерить функциональный охват инструментом).

Если вам нужны интеграционные тесты для улучшения охвата веток, это свидетельствует о том, что вы должны просмотреть дизайн своего кода. И если у вас уже есть высокий охват ветки без интеграционных тестов, добавление их не должно значительно изменять ваши показатели.

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

Ответ 3

Недавно я реализовал это: после некоторых головных болей и большого количества тестов у меня есть конфигурация, которая прекрасно работает.

                 <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.version}</version>
                    <executions>
                        <execution>
                            <id>pre-unit-test</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                                <propertyName>surefireArgLine</propertyName>
                            </configuration>
                        </execution>
                        <execution>
                            <id>pre-integration-test</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <configuration>
                                <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
                                <propertyName>testArgLine</propertyName>
                            </configuration>
                        </execution>

                        <execution>
                            <id>post-integration-test</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-unit-test</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                            </configuration>
                        </execution>
                        <execution>
                            <id>merge-results</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>merge</goal>
                            </goals>
                            <configuration>
                                <fileSets>
                                    <fileSet>
                                        <directory>${project.build.directory}/coverage-reports</directory>
                                        <includes>
                                            <include>*.exec</include>
                                        </includes>
                                    </fileSet>
                                </fileSets>
                                <destFile>${project.build.directory}/coverage-reports/aggregate.exec</destFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-merge-report</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/coverage-reports/aggregate.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <argLine>${surefireArgLine}</argLine>
                <skipTests>${skip.unit.tests}</skipTests>
                <includes>
                    <include>**/*UT.java</include>
                    <include>**/*MT.java</include>
                    <include>**/*Test.java</include>
                </includes>
                <skipTests>${skipUTMTs}</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
                <argLine>${testArgLine}</argLine>
                <excludes>
                    <exclude>**/*UT*.java</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Как вы можете видеть, для запуска тестов есть 6 различных исполнений Jacoco, объединить файлы и создать сводный отчет. В дополнение к конфигурации Jacoco вам также необходимо настроить Surefire и Failsafe, чтобы принять аргумент от Jacoco (Surefire запускает модульные тесты, а Failsafe запускает интеграционные тесты).

Вся конфигурация, которую я использовал, должна быть там, что вы делаете с ней - это ваша архитектура дизайна, чтобы она соответствовала вашим желаемым требованиям. Лично я рекомендую посмотреть, что я исключаю и включаю в surefire и отказоустойчиво, если у вас проблемы с файлами, которые не читаются.