17

Ich erstelle 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).Integration von Integration und Unit-Test-Berichte mit JaCoCo

Nach was ich denke, war eine gründliche 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 and Integration Tests

Antwort

8

Sie sollten einen Blick in die Dokumentation von JaCoCo Maven Plugin nehmen, die ein merge Ziel enthält.

+0

Gute Antwort! Fühlen Sie sich frei, um mein Codebeispiel unten zu sehen. –

13

nicht die Antwort, die Sie suchen, aber immer noch ...

In den meisten Fällen sollten Sie nicht Abdeckung von Modul- und Integrationstests verschmelzen.

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 Filialabdeckung 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 nach unten diese Antwort zu stimmen, da es ein bisschen Thema ist und ziemlich eigenwillig ...

+0

immer noch interessante Punkte! – Jpnh

11

ich das vor kurzem umgesetzt: nach einigen Kopfschmerzen und eine Menge Tests, ich eine Konfiguration haben, die schön 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 können, gibt es 6 verschiedene Jacoco Ausführungen zum Ausführen der Tests, die Dateien zusammenführen und eine aggregierte Bericht 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 es Ihren 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.

+0

Ich würde empfehlen, die Standard-Namenskonventionen von Maven-Surefire-Plugin und Maven-Failsafe-Plugin nicht zu ändern, da dies nicht notwendig ist. Halten Sie die Konventionen ... Und ich würde dringend empfehlen, die gleichen Versionen für Maven-todsichere und Maven-Failsafe weiterhin die neuesten Versionen zu verwenden ... – khmarbaise

+0

Wahrscheinlich eine würdige Empfehlung. Ich wollte den Nutzern einfach ein Codebeispiel geben, das funktioniert, anstatt "Hey, geh und überprüfe das". –

+1

@BobVanDeHey vielen Dank für dieses Snippet. Es war sehr nützlich für mich, meine JaCoCo-Konfigurationen einzurichten. – gvdm