使用以下目标生成jacoco覆盖率报告:
<target name="report" depends="test">
<!-- This task needs the collected execution data and ... -->
<executiondata>
<file file="${result.exec.file}" />
</executiondata>
<!-- the class files and optional source files ... -->
<structure name="JaCoCo Ant Example">
<classfiles>
<fileset dir="${result.classes.dir}" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" >
<exclude name="**/*Test*.class"/>
</fileset>
</sourcefiles>
</structure>
<!-- to produce reports in different formats. -->
<html destdir="${result.report.dir}" />
<csv destfile="${result.report.dir}/report.csv" />
<xml destfile="${result.report.dir}/report.xml" />
</jacoco:report>
</target>
问题在于报告考虑了单元测试的代码,我认为这是一个错误。这样,您的线路覆盖百分比和指令覆盖率将被人为增加(因为测试线被视为100%覆盖)并且报告的正确性受到很大影响。我试着添加这个标签
<exclude name="**/*Test*.class"/
在fileset标签下,希望排除testClasses,但它不起作用。你对我的问题有什么想法吗?我想以编程方式避免 报告修改。 谢谢!
答案 0 :(得分:3)
您需要从classfiles
文件集中排除Test类文件:
<structure name="JaCoCo Ant Example">
<classfiles>
<fileset dir="${result.classes.dir}">
<exclude name="**/*Test*.class"/>
</fileset>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" />
</sourcefiles>
</structure>
请参阅documentation:
“请注意,classfiles和sourcefiles元素接受任何Ant资源集合。因此,也可以过滤类文件集,允许缩小报告的范围,例如:
<classfiles>
<fileset dir="classes">
<include name="org/jacoco/examples/important/**/*.class"/>
</fileset>
</classfiles>
这是因为实际报告是从classfiles
完成的。 sourcefiles
在报告中包含突出显示的源代码 - 当然,人眼无法读取已编译的代码。
再次来自文档:
classfiles :Ant资源和资源的容器元素 可以指定Java类文件,存档文件的集合(jar, war,ear等或Pack200)或包含类文件的文件夹。档案 和文件夹以递归方式搜索类文件。
<强> sourcefiles 强>: Ant资源和资源集合的可选容器元素 指定相应的源文件。如果源文件是 指定,某些报告格式包含突出显示的源代码。 源文件可以指定为单个文件或源 目录。