JaCoCo 覆盖率报告设置(不包括测试类)

JaCoCo coverage report setups(exclude test classes)

我正在使用以下目标生成 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,但它不起作用。你对我的问题有什么想法吗?我想以编程方式避免 报告修改。 谢谢!

您需要从 classfiles 文件集中排除测试 class 文件:

<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

"Note that the classfiles and sourcefiles elements accept any Ant resource collection. Therefore also filtering the class file set is possible and allows to narrow the scope of the report, for example:

<classfiles>
    <fileset dir="classes">
        <include name="org/jacoco/examples/important/**/*.class"/>
    </fileset>
</classfiles> 

这是因为实际报告是从 classfiles 完成的。 sourcefiles 是为了在报告中包含突出显示的源代码——因为人眼当然无法阅读编译后的代码。

再次来自文档:

classfiles: Container element for Ant resources and resource collections that can specify Java class files, archive files (jar, war, ear etc. or Pack200) or folders containing class files. Archives and folders are searched recursively for class files.

sourcefiles: Optional container element for Ant resources and resource collections that specify corresponding source files. If source files are specified, some report formats include highlighted source code. Source files can be specified as individual files or as source directories.