0

我将 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"/>
4

0 回答 0