java - 我可以合并来自单元和集成测试目标的 Emma 覆盖率数据吗?

标签 java unit-testing teamcity code-coverage emma

我们使用构建链设置 TeamCity 构建,以便我们的单元测试和集成测试可以在提交触发时并行运行:

  • 构建链 - 取决于:
    • 单元测试
    • 集成测试

我正在寻找一种方法,可以组合/合并构建链中单元和集成测试生成的覆​​盖率数据,以便我们可以更好地了解有多少实际代码由两者组合覆盖。

接下来的计划是能够监控已提交代码覆盖率的变化,如果百分比下降,则可能会导致构建失败!

最佳答案

我已经设置了“构建链”目标,以便单元和集成目标中的覆盖文件(*.em、*.ec)可供使用。

我专门为构建链目标创建了一个 ant 构建文件(在 emma doco 的帮助下!):

<project name="coverage-merge" basedir="." default="all">
    <!-- directory that contains emma.jar and emma_ant.jar: -->
    <property name="emma.dir" value="${basedir}/lib"/>
    <property name="coverage.dir" location="${basedir}/coverage"/>

    <path id="emma.lib">
        <pathelement location="${emma.dir}/emma-teamcity-3.1.1.jar"/>
        <pathelement location="${emma.dir}/emma_ant-2.0.5312.jar"/>
    </path>

    <taskdef resource="emma_ant.properties" classpathref="emma.lib"/>

    <target name="all" depends="-report"/>

    <target name="-report">
        <emma>
            <report sourcepath="${src.dir}" sort="+block,+name,+method,+class" 
                    metrics="method:70,block:80,line:80,class:100">
                <infileset dir="${coverage.dir}" includes="**/*.em, **/*.ec"/>

                <!-- for every type of report desired, configure a nested
                     element; various report parameters
                     can be inherited from the parent <report>
                     and individually overridden for each report type:
                -->
                <txt outfile="${coverage.dir}/coverage.txt" depth="package" 
                        columns="class,method,block,line,name"/>
                <xml outfile="${coverage.dir}/coverage.xml" depth="package"/>
                <html outfile="${coverage.dir}/coverage.html" depth="method" 
                        columns="name,class,method,block,line"/>
            </report>
        </emma>
    </target>
</project>

...它将所有覆盖率文件合并到一个报告中!

reportmetrics 参数设置 html 报告的突出显示阈值,以便低于阈值的包和文件的百分比以红色突出显示。

修改 xml 输出将允许我使用类似 andariel 的内容对结果运行 xpath,然后在未满足阈值时强制构建失败!

关于java - 我可以合并来自单元和集成测试目标的 Emma 覆盖率数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910969/

相关文章:

javascript - 使用 Jest 进行 React 组件测试

unit-testing - 片段的Robolectric单元测试间歇性地失败,并带有ClassNotFoundException异常

java - NetworkChangeReceiver的onReceive方法在3G和WIFI同时开启时被多次调用

unit-testing - 单元测试 - 测试用例与多种方法

java - 从 Java Batch 应用程序访问 OAuth2 protected api

javascript - 使用 require.js 和 testr.js 启动并运行

teamcity - TeamCity 中工件的特定清理间隔

gradle - 使用Gradle构建脚本中的版本更新TeamCity内部版本号

java - 正则表达式数字空字符串

java - 如何在Java的socket中使用readObject()两次?