我将 Cobertura 1.9.4 与 NetBeans 7.2.1、Ant 1.8.3 和 JDK 1.7.0_05 与 JUnit 4.10 一起使用。
我的 HTML 覆盖率报告正在生成,但它们都列出了 0% 的单元测试覆盖率。这不应该是这种情况,因为我的单元测试涵盖了我的整个 util 类。
有趣的是,如果我通过更改在测试路径中包含检测类,我的所有单元测试都会开始失败
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
至
run.test.classpath=\
${build.instrumented.dir}:\
${javac.test.classpath}:\
${build.test.classes.dir}
此外,如果我打开 emma 代码覆盖工具,我所有的测试用例也会中断。
注意:有一个几乎相同的帖子Cobertura 显示 0% 的覆盖率,但由于它没有得到答复,稍微过时并且我的配置不同,我想我会在这里捕获我的设置。这里有两个类似于我的配置的参考:1) cobertura pdf 2) NetBeans CoberaturaAnt Wiki
从我的build.xml中截取
<!-- this strangely doesn't work so i'm temporarily using hardcoded path below
<taskdef classpath="cobertura.jar" resource="tasks.properties" />
-->
<path id="cobertura.class.path">
<pathelement location="libs/cobertura.jar" />
<pathelement location="libs/asm-3.0.jar" />
<pathelement location="libs/asm-tree-3.0.jar" />
<pathelement location="libs/log4j-1.2.9.jar" />
<pathelement location="libs/jakarta-oro-2.0.8.jar" />
</path>
<taskdef resource="tasks.properties" classpathref="cobertura.class.path" />
<target depends="-init-check,init" name="-init-check-cobertura">
<fail unless="build.classes.dir">Must set build.classes.dir</fail>
</target>
<target name="-post-compile" depends="-init-check-cobertura,init">
<delete dir="${build.instrumented.dir}" />
<delete dir="${build.test.coverage.dir}" />
<mkdir dir="${build.instrumented.dir}" />
<mkdir dir="${build.test.coverage.dir}" />
<cobertura-instrument todir="${build.instrumented.dir}"
datafile="${build.dir}/cobertura.ser">
<fileset dir="${build.classes.dir}">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
</target>
<target name="coverage-report" depends="test">
<cobertura-report format="html" destdir="${build.test.coverage.dir}"
datafile="${build.dir}/cobertura.ser"/>
<delete file="${build.dir}/cobertura.ser" />
<delete dir="${build.instrumented.dir}" />
</target>
我还在我的project.properties文件中定义了这些
build.instrumented.dir=${build.dir}/instrumented
build.test.coverage.dir=${build.dir}/test/coverage
仅供参考,我已经尝试将这些添加到我在 build-impl.xml 中的标签中。仍然是零覆盖。
<jvmarg value="-Dcobertura.use.java.nio=false"/>
<jvmarg value="-Dnet.sourceforge.cobertura.datafile=${basedir}/cobertura.ser"/>
ant 测试目标来自 netbeans 生成的 build-impl.xml 文件
<target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse"
description="Run unit tests." name="test"/>