2014-10-09 251 views
3

我正在將一個ANT構建轉換爲Maven。我不使用聲納。Jacoco覆蓋的單元測試代碼

在Maven中,Jacoco似乎並沒有報道單元測試本身的覆蓋範圍,而ANT的確如此。我一直試圖爲我的Maven構建獲得這個,但是我一直無法找到任何東西。

看來我應該添加一個<include>prepare-agent的目標,但我不確定要包含什麼。我試過src/test/java/*和這個主題的各種變化,但沒有任何作品。

如何在Maven中配置Jacoco,使其報告單元測試代碼的覆蓋範圍?

回答

2

原來,唯一的方法就是使用maven-antrun-plugin

不需要將<include>添加到prepare-agent目標,因爲所有信息都存在於它生成的jacoco.exec文件中,包括單元測試代碼。

report目標不包括它,但它也不能配置爲使用它。您需要專門設置classfilessourcefiles屬性,而Maven Jacoco插件不會讓您這樣做。

因此,您需要Maven Antrun插件,並從中進行配置和調用。

<plugins> 
    <plugin> 
     <groupId>org.jacoco</groupId> 
     <artifactId>jacoco-maven-plugin</artifactId> 
     <version>${jacoco.version}</version> 
     <executions> 
      <execution> 
       <id>default-prepare-agent</id> 
       <goals> 
        <goal>prepare-agent</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
       <id>default-report</id> 
       <phase>package</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <target> 
         <taskdef name="report" classname="org.jacoco.ant.ReportTask" classpathref="maven.plugin.classpath" /> 
         <report> 
          <executiondata> 
           <file file="${project.build.directory}/jacoco.exec" /> 
          </executiondata> 
          <structure name="Coverage"> 
           <classfiles> 
            <fileset dir="${project.build.directory}/classes"/> 
            <fileset dir="${project.build.directory}/test-classes"/> 
           </classfiles> 
           <sourcefiles encoding="UTF-8"> 
            <fileset dir="src/main/java"/> 
            <fileset dir="src/test/java"/> 
           </sourcefiles> 
          </structure> 
          <check failonviolation="true" violationsproperty="violation"> 
           <rule element="BUNDLE"> 
            <limit counter="INSTRUCTION" value="COVEREDRATIO" minimum="0.95" /> 
           </rule> 
          </check> 
          <html destdir="${project.build.directory}/jacoco-internal"/> 
         </report> 
        </target> 
       </configuration> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
       <groupId>org.jacoco</groupId> 
       <artifactId>org.jacoco.ant</artifactId> 
       <version>${jacoco.version}</version> 
      </dependency> 
     </dependencies> 
    </plugin> 
</plugins> 
相關問題