3

我正在使用 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从上一次运行中删除后重试了。

请问我有什么问题吗?

干杯,

文件夹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
4

1 回答 1

0

覆盖率为 0% 的唯一情况是

  • 当您没有正确设置类路径时,您的测试将针对非检测代码运行,或者,
  • 您的 .ser(元数据)文件已过时,无论何时构建/重建代码,都应删除现有的元数据文件并再次检测。

有关类路径的一个很好的示例,请参见此处https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference

此外,最好将检测类保存在单独的文件夹中,并为测试类指定不同的文件夹。

于 2014-04-05T09:16:54.330 回答