2010-09-11 4 views
3

J'utilise Cobertura 1.9.3 avec NetBeans 6.8, Ant 1.7.1 et 1.6.0_21 en cours d'exécution avec JDK -WAR et EJB, JUnit 4 tests. Lorsque je change la ligne pathelement location="${build.classes.dir}" / en pathelement location="${build.test.classes.dir}" /, il y a une certaine couverture (bien que dans les mauvaises classes, elle ne devrait pas être dans la classe de test, juste pour montrer que l'environnement et les emplacements .jar sont réglés correctement) montrés dans le rapports html.Cobertura montrant 0% de couverture

Cependant, quand je change de nouveau à pathelement location="${build.classes.dir}" /, je reçois toujours 0% de couverture.

fwiw, lorsque les dossiers d'instrumentation contiennent des classes instrumentées dans ${build.instrumented.dir} (ces classes sont légèrement plus grandes que celles de l'emplacement ${build.classes.dir}). Et oui, j'ai réessayé après avoir supprimé cobertura.ser de l'exécution précédente.

ce que je pourrais s'il vous plaît avoir la moindre idée sur ce qui ne va pas?

Cheers,

Snippet de build.xml dans un dossier -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> 

===

Edit: J'ai aussi la configuration suivante:

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

Je suis aussi sur un système de contrôle de version si j'ai l'utilisation du dossier dédié pour le partage de bibliothèques option cochée dans NetBeans, ainsi que le serveur de copie des fichiers JAR à l'option Bibliothèques dossier. J'ai eu des problèmes précédents dans lesquels je ne ai pas importer les bibliothèques pertinentes, mais cela ne semble pas être un problème bibliothèque ... – gkw

+0

Voir sur la façon de http://techo-ecco.com/blog/testng-with-cobertura/ le configurer correctement –

Répondre

0

Le seul cas où vous obtenez 0% de couverture est

  • Lorsque vous avez pas configuré correctement votre classpath, vos tests sont en cours d'exécution contre le code non instrumenté, ou,
  • Votre fichier .ser (métadonnées) est périmé. Lorsque vous générez/reconstruisez votre code, vous devez supprimer à nouveau le fichier de métadonnées existant et l'instrument.

Voir ici pour un bon exemple classpath https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference

En outre, il est une bonne idée de garder les classes instrumentées dans un dossier séparé, ainsi que de spécifier un dossier différent pour les classes de test.