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

时间:2009-12-15 22:40:06

标签: java unit-testing teamcity code-coverage emma

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

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

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

然后计划是能够监控已提交代码的覆盖范围变化,如果百分比下降,可能会失败构建!

3 个答案:

答案 0 :(得分:2)

我已经设置了'构建链'目标,以便可以使用单位和集成目标中的覆盖文件(* .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>

...将所有覆盖文件合并为一个报告!

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

修改xml输出将允许我使用andariel之类的东西在结果上运行xpath,然后在不满足阈值的情况下强制构建失败!

答案 1 :(得分:1)

TC's Emma doc

  

所有coverage。*文件在构建开始时被删除,因此您必须确保在构建中执行完整的源代码重新编译以获得实际的coverage.em文件。

我所做的解决方法如下:

  • 在teamcity构建步骤配置中使用-out emma.em,并确保merge选项设置为true以保留已检测数据。
  • 在生成覆盖率报告的最后一步中,使用ant的移动任务 <move file="$YOUR_PATH/emma.em" tofile="$YOUR_PATH/coverage.em"/>重命名为默认值。
  • emma报告将选取默认的em文件以生成报告。

希望这能帮助任何人获得积累的艾玛报道报告。

答案 2 :(得分:0)

我遇到的大多数代码覆盖工具似乎都无法组合来自不同或重叠子系统的测试结果。正如你所指出的,这是一个非常有用的能力。

我们的SD Test Coverage tools 具备此功能,可用于Java,C,C ++,C#,PHP和COBOL。实际上,SD测试覆盖率工具可以将来自多种语言的测试覆盖率数据组合到一个单一的结果中,以便您可以概览多语言应用程序的测试覆盖率。它能够显示所涉及的所有源语言的覆盖范围,并提供摘要报告。