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