9

我无法让 jacoco/junit ant 目标从覆盖范围中排除类。我可以通过以下方式排除软件包:

<jacoco:coverage destfile="${coverage.reports.dir.xml}/output.jacoco" excludes="foo.*:bar.fiz.*:my.long.package.name.*">

这并不排除我的测试类,因为测试类与他们测试的类在同一个包中。我已经厌倦了用正则表达式排除测试类,但它不起作用。

<jacoco:coverage destfile="${coverage.reports.dir.xml}/output.jacoco" excludes="foo.*:bar.fiz.*:**/Test.*:**/Tests.*">

我也尝试在报告任务中只包含我想要的类,但是由于我们的测试类位于不起作用的相同包中。我们的构建将所有类放在同一个目录中,例如 buildRoot/classes/ProjectName。因此 buildRoot/classes/ProjectName/foo 将包含已编译的测试类和非测试类。

有什么建议如何让 jacoco 排除此设置中的所有测试?

谢谢。

4

1 回答 1

23

指定具有 的类jacoco:coverage会将它们排除在覆盖范围之外,因此它们在报告中显示为具有 0% 的覆盖率。

为了也从 JaCoCo 报告中排除这些类,您需要使用 classfiles 文件集任务并在jacoco:reportant 任务中排除它们。

<jacoco:report>
  <executiondata>
    <file file="${coverage.reports.dir.xml}/merged-jacoco.exec"/>
  </executiondata>
  <structure name="Unit Tests ${unit.test.run.ts}">
    <classfiles>
      <fileset dir="${build.root}/classes/ProjectName/" >
        <exclude name="**/*Test*.class" />
      </fileset>
    </classfiles>
    <sourcefiles encoding="UTF-8">
      <fileset dir="${src.root}/ProjectName/src/main"/>
    </sourcefiles>
  </structure>

  <html destdir="${coverage.reports.dir.html}"/>
</jacoco:report>
于 2013-01-19T21:13:57.710 回答