Netbeans Cobertura显示覆盖率为0%

Netbeans Cobertura显示覆盖率为0%,netbeans,junit,cobertura,Netbeans,Junit,Cobertura,我使用的是Cobertura 1.9.3和NetBeans 6.8、Ant 1.7.1以及JDK 1.6.0Ø21,并使用-WAR和EJB、JUnit 4测试 当我将行pathelement location=“${build.classes.dir}”/更改为pathelement location=“${build.test.classes.dir}”/时,html报告中显示了一些覆盖范围(尽管在错误的类中,它不应该在testclass中,只是为了显示正确设置了环境和.jar位置) 但是,当

我使用的是Cobertura 1.9.3和NetBeans 6.8、Ant 1.7.1以及JDK 1.6.0Ø21,并使用-WAR和EJB、JUnit 4测试

当我将行
pathelement location=“${build.classes.dir}”/
更改为
pathelement location=“${build.test.classes.dir}”/
时,html报告中显示了一些覆盖范围(尽管在错误的类中,它不应该在testclass中,只是为了显示正确设置了环境和.jar位置)

但是,当我将其更改回
pathelement location=“${build.classes.dir}”/
时,我总是得到0%的覆盖率

fwiw,当检测文件夹确实包含
${build.instrumented.dir}
中的检测类时(这些类略大于
${build.classes.dir}
位置中的类)。是的,我在删除上次运行中的
cobertura.ser
后重试过

能告诉我出了什么事吗

干杯

-ejb
文件夹中的
build.xml
片段

           <property environment="env"/>
           <path id="cobertura.class.path">
               <fileset dir="${build.dir}/../../lib">
                   <include name="**/*.jar"/>
               </fileset>
           </path>
           <taskdef classpathref="cobertura.class.path" resource="tasks.properties"/>

           <target name="-pre-compile-test">
               <delete dir="${build.instrumented.dir}" />
               <delete dir="${build.report.cobertura.dir}" />
               <mkdir dir="${build.instrumented.dir}" />
               <mkdir dir="${build.report.cobertura.dir}" />
               <cobertura-instrument todir="${build.instrumented.dir}" classpathref="cobertura.class.path">
                   <ignore regex="org.apache.log4j.*" />
                   <includeClasses regex=".*" />
                   <excludeClasses regex=".*\.Test.*" />
                   <excludeClasses regex=".*\.TestSuite.*" />

                   <instrumentationClasspath>
                       <pathelement location="${build.classes.dir}" />
                   </instrumentationClasspath>
               </cobertura-instrument>
           </target>

           <target name="-post-test-run">
               <cobertura-report format="html" srcdir="${src.dir}" destdir="${build.report.cobertura.dir}"/>
               <cobertura-report format="xml" srcdir="${src.dir}" destdir="${build.report.cobertura.dir}"/>
           </target>

只有在您获得0%保险的情况下

  • 当您没有正确设置类路径时,您的测试将失败 针对未检测的代码运行,或
  • 您的.ser(元数据)文件已过时,无论何时生成/重新生成代码,都应该删除现有元数据文件并再次插入
有关类路径的一个好例子,请参见此处


另外,最好将插入指令的类保存在一个单独的文件夹中,并为测试类指定一个不同的文件夹。

我也在版本控制系统上,因此我在NetBeans中选中了“使用专用文件夹共享库”选项,以及“将服务器JAR文件复制到库”文件夹选项。我以前遇到过导入相关库失败的问题,但这似乎不是库问题…请参阅如何正确配置
        ...
        build.test.classes.dir=${build.dir}/test/classes
        build.test.results.dir=${build.dir}/test/results
        build.instrumented.dir=${build.dir}/instrumented
        build.report.dir=${build.dir}/report
        build.report.cobertura.dir=${build.report.dir}/cobertura
        ...
        javac.classpath=\
        ${libs.GlassFish_v3.classpath}:\
        ${file.reference.mysql-connector-java-5.1.13-bin.jar}
        ...
        javac.test.classpath=\
        ${javac.classpath}:\
        ${file.reference.mysql-connector-java-5.1.13-bin.jar}:\
        ${libs.Libraries_Needed_For_JUnit.classpath}:\
        ${build.instrumented.dir}:\
        ${build.classes.dir}:\
        ${libs.junit_4.classpath}
        ...
        run.test.classpath=\
        ${javac.test.classpath}:\
        ${file.reference.mysql-connector-java-5.1.13-bin.jar}:\
        ${libs.Cobertura.classpath}:\
        ${libs.Libraries_Needed_For_JUnit.classpath}:\
        ${libs.junit_4.classpath}:\
        ${build.test.classes.dir}
        ...
        src.dir=${source.root}/java
        test.src.dir=test