Frage Integration von Integrations- und Unit-Test-Berichten mit JaCoCo


Ich erzeuge failsafe und todsichere Berichte mit Maven mit dem JaCoCo-Plugin, aber ich kann nur schaffen, sie in separaten Berichten zu bekommen. Ich möchte auch eine Gesamtüberblicksansicht haben (Zusammenführung zwischen Unit-Tests und Integrationstests).

Nach meiner gründlichen Google-Suche konnte ich nur einen Weg finden, dies mit Sonar zu tun. Gibt es einen einfacheren Weg dies zu tun?

Verwandte Frage: Maven separate Unit Test und Integration Tests


20
2017-10-26 15:42


Ursprung


Antworten:


Sie sollten einen Blick in die Dokumentation des JaCoCo Maven Plugins werfen, welches ein merge Tor.


8
2017-10-26 16:03



Ich habe dies kürzlich implementiert: Nach einigen Kopfschmerzen und vielen Tests habe ich eine Konfiguration, die wunderbar funktioniert.

                 <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>

Wie Sie sehen, gibt es 6 verschiedene Jacoco-Ausführungen, um die Tests durchzuführen, die Dateien zusammenzuführen und einen Gesamtbericht zu erstellen. Zusätzlich zur Jacoco-Konfiguration müssen Sie auch Surefire und Failsafe konfigurieren, um ein Argument von Jacoco zu übernehmen (Surefire führt die Komponententests aus und Failsafe führt die Integrationstests durch).

Die gesamte Konfiguration, die ich verwendet habe, sollte da sein. Was Sie damit machen, ist Ihre Design-Architektur, um sie an Ihre gewünschten Anforderungen anzupassen. Persönlich empfehle ich einen Blick in das, was ich ausschließen und in todsichere und ausfallsichere einschließen, wenn Sie Probleme mit Dateien haben, die nicht gelesen werden.


17
2018-01-12 23:45



Nicht die Antwort, die du suchst, aber trotzdem ...

In den meisten Fällen sollten Sie keine Abdeckung von Einheiten- und Integrationstests zusammenführen.

Der Wert von Komponententests liegt darin, dass sie das Design Ihrer Anwendung verbessern und sicherstellen, dass die Ecken des Codes ordnungsgemäß funktionieren. Sie sollten versuchen, eine hohe Zweigabdeckung Ihrer Komponententests zu erreichen.

Der Wert Ihrer Integrationstests liegt darin, dass sie sicherstellen, dass die wichtigsten Anwendungsfälle Ihrer Anwendung ordnungsgemäß funktionieren und dass der gesamte Stack korrekt integriert ist. Sie sollten versuchen, eine hohe Funktionsabdeckung für Ihre Integrationstests zu erreichen. (Es ist jedoch ziemlich schwierig, die Funktionsabdeckung mit einem Werkzeug zu messen).

Wenn Sie Integrationstests benötigen, um Ihre Branchenabdeckung zu verbessern, ist dies ein starkes Indiz dafür, dass Sie das Design Ihres Codes überprüfen sollten. Und wenn Sie bereits eine hohe Branchenabdeckung ohne Integrationstests haben, sollte das Hinzufügen dieser Indikatoren Ihre Messwerte nicht wesentlich ändern.

Fühlen Sie sich frei, diese Antwort zu bewerten, da es ein bisschen Thema und ziemlich eigensinnig ist ...


16
2017-10-26 16:14



Aufbauend auf der Antwort von Tschad, hier ist meine Konfiguration. Es ist als separates Profil mit dem Namen konfiguriert jacoco also kann ich es einfach ein- und ausschalten. Es verwendet nur die Standardkonfiguration. Es kann einen separaten Code-Coverage-Bericht für Komponententests, einen separaten Code-Coverage-Bericht für Integrationstests und einen kombinierten Code-Coverage-Bericht erstellen.

    <profile>
        <id>jacoco</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>pre-unit-test</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>post-unit-test</id>
                            <phase>test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>pre-integration-test</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>post-integration-test</id>
                            <goals>
                                <goal>report-integration</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>merge-results</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>merge</goal>
                            </goals>
                            <configuration>
                                <fileSets>
                                    <fileSet>
                                        <directory>${project.build.directory}</directory>
                                        <includes>
                                            <include>*.exec</include>
                                        </includes>
                                        <excludes>
                                            <exclude>aggregate.exec</exclude>
                                        </excludes>
                                    </fileSet>
                                </fileSets>
                                <destFile>${project.build.directory}/aggregate.exec</destFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>post-merge-report</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <configuration>
                                <dataFile>${project.build.directory}/aggregate.exec</dataFile>
                                <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

0
2018-04-18 08:22