2

我有一个项目,我有 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。

4

1 回答 1

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>

你可以在这里找到更多信息。

于 2013-04-17T18:34:39.817 回答