2015-05-18 28 views
5

Jestem całkiem nowy w JaCoCo i mam problem z generowaniem raportu dotyczącego pokrycia kodu.JaCoCo: brakujący katalog klas

To jest mój struktury projektu:

moich testów integracyjnych żyć w "...- integracyjne-testy" modułu. Kiedy budować mojego projektu przy użyciu mvn otrzymuję następujący w moim rejestrowania:

[INFO] Skipping JaCoCo execution due to missing classes directory: ...-integration-tests\target\classes 

to prawda, bo moja skompilowany kod jest dostępna tylko w docelowej> klas odpowiedniego modułu.

Jaki jest najlepszy sposób, aby to zadziałało? Z góry dziękuję!

+0

Pierwszy ze względu na to, że korzystasz z testu integracji IT, musisz uruchomić aplikację .war za pomocą aplikacji Tomcat lub podobnej maszyny JVM. Musisz dołączyć plik jacocoagent.jar i podać destfile = jacocoIT.exe lub inną nazwę do skryptu startowego JVM (Tomcat) lub przekazać do niego Opcje. Następnie dostanie pliki klas. W tej chwili traktuje on swój moduł testów IT jako projekt i nie ma tam żadnych zajęć. Gdzie generujesz pliki klas dla kodu źródłowego testu IT? –

Odpowiedz

0

Dzieje się tak dlatego JaCoCo „raport” mojo próbuje znaleźć źródła i zajęcia w „default” układ projektu Maven:

@Override 
boolean canGenerateReportRegardingClassesDirectory() { 
    return new File(getProject().getBuild().getOutputDirectory()).exists(); 
} 

uwzględniając układ podobny do Ciebie udało mi się obejść ograniczenia konfiguracyjne JaCoCo jawnie ustawienie build.sourceDirectory i build.outputDirectory, aby wskazywać na elementy wewnętrzne przetestowanego modułu. Po tym Maven próbował go skompilować na raz drugi, więc miałem również wymuszenia realizacji domyślne kompilacji, ważne (i współdzielone) część moich testów modułu pom.xml teraz wyglądać następująco:

<?xml version="1.0" encoding="UTF-8"?> 
<project ... 
... 
    <parent> 
... 
    </parent> 

    <dependencies> 
... 
    </dependencies> 

    <properties> 
... 
    </properties> 

    <build> 
     <sourceDirectory>../../Source</sourceDirectory> <!-- tested sources root, in proper layout: src/main/java --> 
     <outputDirectory>../bin</outputDirectory> <!-- tested classes root, in proper layout: target/classes --> 

     <testSourceDirectory>${project.basedir}/../../Test/java</testSourceDirectory> <!-- if tests code also taken from outside --> 

     <testResources> 
      ... 
     </testResources> 

     <plugins> 
... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <executions> 
        <!-- disabling default-compile --> 
        <execution> 
         <id>default-compile</id> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <phase>compile</phase> 
         <configuration> 
          <source>1.7</source> 
          <target>1.7</target> 
          <includes/> 
          <excludes> 
           <exclude>**/*.java</exclude> 
          </excludes> 
         </configuration> 
        </execution> 
... 
       </executions> 
      </plugin> 

      <!-- typical jacoco usage --> 
      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>prepare-agent</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>report</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>report</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.16</version> 
       <dependencies> 
        <dependency> 
         <groupId>org.apache.maven.surefire</groupId> 
         <artifactId>surefire-junit4</artifactId> 
         <version>2.10</version> 
        </dependency> 
       </dependencies> 
       <configuration> 
... 
        <argLine>${argLine} -XX:PermSize=512M -XX:MaxPermSize=512M -Xmx1024M</argLine> 
... 
        <forkCount>1</forkCount> 
        <reuseForks>true</reuseForks> 
       </configuration> 
       <executions> 
... 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project>