从Emma代码覆盖率报告中过滤junit测试类

时间:2012-04-27 19:31:37

标签: java ant code-coverage emma

我有一个项目,我有一个emma代码覆盖脚本(使用ant)构建并正确生成测试。

我有两个包裹     com.myproject.abc     test.com.myproject.abc

所有junit测试都在test.com.mywebsite.abc包中。我的目标是不要在报告中包含test.com.myproject.abc包(coverage.xml)。我已经阅读了有关覆盖过滤器的emma文档,并查看了其他几个示例,但如果不在仪器中包含junit测试,则无法使其工作。

如果我将过滤器包含在检测目标中......它不会检测用于junit测试的junit类。结果是classNotFoundException。

这是我的代码。

<target name="emma-instrument" depends="clean" description="instruments the code">   
        <emma enabled="true">  
            <instr instrpath="${classes}" destdir="${emma.instr.dir}"  
                metadatafile="${emma.coverage.dir}/coverage.emma" merge="true" >
                <filter excludes="test.com.myproject.abc"/> 
            </instr>
         </emma>

    </target>  

当检测发生时,它会将所有检测类移动到emma / instrumentation - 它包含在类路径中。

<target name="test" depends="test_preconditions" description="run junit tests">  
        <junit fork="yes" printsummary="yes" haltonfailure="yes">  
            <classpath refid="test.classpath" />  
            <formatter type="plain" usefile="false" />  
            <batchtest>  
                <fileset dir="${classes}">
                    <include name="**/*Test*"/>

                </fileset>
            </batchtest>  
            <jvmarg value="-Demma.coverage.out.file=${emma.coverage.dir}/coverage.emma" />  
            <jvmarg value="-Demma.coverage.out.merge=true" />  
            <jvmarg value="-XX:-UseSplitVerifier"/>
        </junit>  
    </target>  

所以只是重复 - 是否可以从Emma Coverage报告中排除JUNIT测试?我需要改变什么?提前谢谢。

我使用的是emma 2.1(代码覆盖率),java和ant。

1 个答案:

答案 0 :(得分:1)

您可以使用JaCoCo库,如下所示:

<target name="test" depends="test_preconditions" description="run junit tests">  
    <mkdir dir="${test.data.dir}" />

    <!-- Run all tests -->
    <jacoco:coverage destfile="${test.data.dir}/jacoco.exec">
        <junit fork="yes" printsummary="yes" haltonfailure="yes">  
            <classpath refid="test.classpath" />  
            <formatter type="plain" usefile="false" />  
            <batchtest>  
                <fileset dir="${classes}">
                    <include name="**/*Test*"/>

                </fileset>
            </batchtest>  
        </junit>  
    </jacoco:coverage>

    <!-- Generate Code Coverage report
        See: http://www.eclemma.org/jacoco/trunk/doc/ant.html -->
    <jacoco:report>
        <executiondata>
            <file file="${test.data.dir}/jacoco.exec" />
        </executiondata>

        <structure name="AntTestReporting">
            <classfiles>
                <fileset dir="${build.dir}">
                    <include name="**/*.class" />
                    <!-- Exclude classes necessary for testing only from the code coverage report-->
                    <exclude name="**/*Test*.class" />
                    <!-- Exclude inner classes -->
                    <exclude name="**/*$*.class" />
                </fileset>
            </classfiles>
        </structure>

        <html destdir="${coverage.reports.dir}" />
    </jacoco:report>
</target>

您可以找到更多信息here