【问题标题】:JaCoCo coverage report setups(exclude test classes)JaCoCo 覆盖率报告设置(不包括测试类)
【发布时间】:2015-04-17 23:36:55
【问题描述】:

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

【问题讨论】:

    标签: java ant jacoco


    【解决方案1】:

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

    <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)或包含类文件的文件夹。档案 并递归搜索文件夹以查找类文件。

    源文件用于 Ant 资源和资源集合的可选容器元素 指定相应的源文件。如果源文件是 指定,某些报告格式包括突出显示的源代码。 源文件可以指定为单个文件或源 目录。

    【讨论】:

    • 当对build.xml 进行上述更改时,排除的类仍然是0% 覆盖范围的报告的一部分,或者排除的类或包是否已完成删除而不是报告的一部分?感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2018-09-09
    • 2015-04-18
    相关资源
    最近更新 更多