2014-10-09 179 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> 
相关问题