Cobertura显示0%的覆盖率

时间:2010-09-11 19:31:16

标签: 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}" /时,会有一些覆盖(尽管在错误的类中,它不应该在测试类中,只是为了显示环境和.jar位置正确设置)显示在html报告中。

然而,当我将其更改回pathelement location="${build.classes.dir}" /时,我总是获得0%的覆盖率。

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

请问我有什么问题可以找到答案吗?

干杯,

build.xml文件夹中-ejb的摘录。

           <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>

===

编辑:我还有以下设置:

        ...
        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

1 个答案:

答案 0 :(得分:0)

获得0%保险的唯一情况是

  • 如果没有正确设置类路径,那么您的测试就是 针对非检测代码运行,或
  • 您的.ser(元数据)文件过时,无论何时构建/重建代码,都应该再次删除现有的元数据文件和工具。

有关classpath https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference

的详细示例,请参阅此处

此外,将检测类保存在单独的文件夹中,以及为测试类指定不同的文件夹,这是一个好主意。

相关问题