17

Generuję raporty bezpieczeństwa i pewności z użyciem wtyczki JaCoCo, ale mogę tylko uzyskać je w oddzielnych raportach. Chciałbym mieć również ogólny widok pokrycia (połączenie zarówno testów jednostkowych, jak i testów integracyjnych).Łączenie raportów integracji i testów jednostkowych za pomocą JaCoCo

Po tym, jak sądzę, dokładne przeszukanie google, mogłem znaleźć sposób, aby to zrobić z Sonarem. Czy jest jakiś prostszy sposób na zrobienie tego?

Powiązane pytanie: Maven separate Unit Test and Integration Tests

Odpowiedz

8

należy spojrzeć do dokumentacji pluginu JaCoCo Maven, który zawiera merge cel.

+0

Dobra odpowiedź! Zapraszam do obejrzenia poniższego przykładowego kodu. –

13

nie odpowiedź szukasz, ale nadal ...

W większości przypadków nie należy łączyć relacje z testów jednostkowych i integracyjnych.

Wartość testów jednostkowych polega na tym, że poprawiają konstrukcję aplikacji i zapewniają prawidłowe działanie narożnych przypadków kodu. Powinieneś starać się o wysoki zasięg oddziałów swoich testów jednostkowych.

Wartość testów integracji polega na tym, że zapewniają prawidłowe działanie głównych aplikacji i prawidłową integrację całego stosu. Powinieneś starać się mieć wysoki zasięg funkcjonalny dla testów integracyjnych. (Ale dość trudno zmierzyć funkcjonalny zasięg za pomocą narzędzia).

Jeśli potrzebujesz testów integracyjnych, aby poprawić zasięg swojego oddziału, jest to mocna wskazówka, że ​​powinieneś zapoznać się z projektem swojego kodu. A jeśli masz już wysoki zasięg sieci bez testów integracyjnych, dodawanie ich nie powinno znacząco modyfikować twoich danych.

Zapraszam do głosowania w dół tę odpowiedź, jak to jest trochę temat i dość uparty ...

+0

nadal ciekawe punkty! – Jpnh

11

Niedawno realizowane w ten sposób: po kilku bóle i wielu testów, mam konfigurację, która działa pięknie.

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

Jak widać, istnieją odrębne 6 egzekucje Jacoco aby uruchomić testy, scalanie plików i utworzyć raport zbiorczy. Poza konfiguracją Jacoco, musisz skonfigurować Surefire i Failsafe, aby wziąć argument z Jacoco (Surefire uruchamia testy jednostkowe, a Failsafe uruchamia testy integracji).

Wszystkie konfiguracje, których użyłem, powinny tam być. Dzięki temu zaprojektujesz architekturę, aby pasowała do pożądanych wymagań. Osobiście, polecam spojrzenie na to, co wykluczę i dołączę do bezpiecznego i bezpiecznego, jeśli masz problemy z odczytaniem plików.

+0

Zalecam, aby nie zmieniać domyślnych konwencji nazewnictwa wtyczki maven-surefire i wtyczki maven-failsafe, ponieważ nie jest to konieczne. Zachowaj konwencje ... Zdecydowanie zaleca się używanie tych samych wersji dla maven-surefire i maven-failsafe, a ponadto najnowsze wersje ... – khmarbaise

+0

Prawdopodobnie godna rekomendacja. Chciałem po prostu dać użytkownikom przykład kodu, który działa zamiast "Hej, sprawdź" to ". –

+1

@BobVanDeHey bardzo dziękuję za ten fragment. Bardzo użyteczne było dla mnie skonfigurowanie konfiguracji JaCoCo. – gvdm

Powiązane problemy