Cobertura avec Script Ant : xml/html rapport de couverture de toujours à 0% de couverture partout
J'ai essayé d'obtenir Cobertura cours d'exécution à l'intérieur de mon script ant. Tout est réussi (source code du bâtiment, junit tests, cobertura rapports (xml /html); mais dans les rapports html, la couverture de code est toujours à 0% ...
Script Ant : faire-instrument
<!-- Make instrument for Cobertura engine -->
<target name="make-instrument">
<!-- Remove the coverage data file and any old instrumentation. -->
<delete file="${cobertura.ser}" />
<!-- Instrument the application classes, writing the instrumented classes into ${build.instrumented.dir}. -->
<cobertura-instrument todir="${report.cobertura.dir}">
<!-- The following line causes instrument to ignore any source line containing a reference to log4j,
for the purposes of coverage reporting. -->
<ignore regex="org.apache.log4j.*" />
<fileset dir="${webcontent.dir}/WEB-INF/classes">
<!-- Instrument all the application classes, but don't instrument the test classes. -->
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</fileset>
</cobertura-instrument>
</target>
Script Ant : faire-instrument
<target name="install-cobertura" if="is-hudson-env">
<path id="cobertura.classpath">
<fileset dir="${user.home.sharehunter.dir}/cobertura-${cobertura.rev}">
<include name="**/cobertura.jar" />
<include name="**/*.jar" />
</fileset>
</path>
<taskdef resource="tasks.properties" classpathref="cobertura.classpath" />
</target>
Script Ant : junit
<target name="run-tests" depends="make-instrument">
<path id="classpath.test">
<path path="${webcontent.dir}/WEB-INF/classes" />
<pathelement location="${webcontent.dir}/WEB-INF/classes" />
<fileset dir="${lib.dir}" includes="**/*.jar" />
<path location="${webcontent.dir}/WEB-INF/classes" />
<path location="${webcontent.dir}/WEB-INF" />
<path location="${webcontent.dir}" />
</path>
<junit fork="yes" failureProperty="test.failed">
<classpath refid="classpath.test" />
<classpath location="${user.home.dir}/junit-${junit.rev}.jar" />
<!-- Specify the name of the coverage data file to use.
The value specified below is the default. -->
<sysproperty key="net.sourceforge.cobertura.datafile" file="${cobertura.ser}" />
<!-- Note the classpath order: instrumented classes are before the original (uninstrumented) classes. -->
<classpath location="${report.cobertura.dir}" />
<!--
The instrumented classes reference classes used by the
Cobertura runtime, so Cobertura and its dependencies
must be on your classpath.
-->
<classpath refid="cobertura.classpath" />
<!-- Generate xml files for each junit tests runs -->
<formatter type="xml" />
<batchtest todir="${report.junit.dir}">
<fileset dir="${webcontent.dir}/WEB-INF/classes">
<include name="**/*Test.class" />
</fileset>
</batchtest>
</junit>
<!-- Generate Cobertura xml file containing the coverage data -->
<cobertura-report format="xml" srcdir="${src.main.java.dir}" destdir="${report.cobertura.dir}" datafile="${cobertura.ser}" />
<!-- Generate Cobertura html file report containing the coverage data -->
<cobertura-report format="html" srcdir="${src.main.java.dir}" destdir="${report.cobertura.dir}" datafile="${cobertura.ser}" />
</target>
OriginalL'auteur Anthony | 2010-10-19
Vous devez vous connecter pour publier un commentaire.
C'est ce que Cobertura FAQ Dit
Quand j'générer des rapports de couverture, pourquoi font-ils toujours à 0% de couverture partout?
Cobertura est probablement l'utilisation de la mauvaise
.ser
fichier lors de la génération des rapports. Lorsque vous instrument de vos classes, Cobertura génère un.ser
fichier contenant des informations de base sur chaque classe. Que vos tests à exécuter, Cobertura ajoute des informations complémentaires à ce même fichier de données. Si l'instrumentation des classes ne peut pas trouver le fichier de données lors de l'exécution, alors ils s'en créer un nouveau. Il est important que vous utilisez la même couverture.ser fichier lorsque instrumentant, en cours d'exécution, et la génération de rapports.La meilleure façon de le faire est de spécifier l'emplacement du fichier de données lors de l'exécution de vos tests. Vous devriez passer l'
-Dnet.sourceforge.cobertura.datafile=${basedir}/cobertura.ser
sysproperty à la JUnit tâche.Un autre problème commun est que le
cobertura.ser
fichier est supprimé, mais la déjà instrumenté classes ne sont pas également supprimés. Tout moment supprimer vos données de couverture de fichier, vous devez également supprimé tous les instrumenté classes.OriginalL'auteur user1168679
Ok j'ai trouvé le problème. Pour être sûr de l'avoir ceci :
Instrumenté classes sont avant de l'original (sans) des classes.
OriginalL'auteur Anthony
J'ai essayé de la même manière. J'ai aussi utilisé d'instrumentation de code avant le code source, mais je suis arriver à 0 % dans le fichier de rapport.
La chose surprenante est que le rapport généré, dit-total 2% de couverture, mais le résumé fichier indique 0% de couverture.
Où les vieux cobertura tâche montre 8% de couverture. Je suis totalement confus 🙁
OriginalL'auteur mr.india
Probablement, il n'est pas applicable à tout le monde mais j'ai eu le même problème où la couverture était de 0 pour toutes les classes.
Il y avait 2 questions dans mon cas
1) c'était la lecture de mal jdk version 1.8 hors du CHEMIN. J'ai mis à jour CHEMIN de lire jdk 1.6.
2) il a été initialement à l'aide de la version 1.8 de cobertura. J'ai couru le construire et il serait de générer des rapport de couverture, mais toutes les classes ont été de 0% toujours. J'ai mis à jour le javac cible aux
debug="true" debuglevel="vars,lines,source"
référence: cobertura 0 couverturePuis a couru le construire à nouveau et vu qu'il y avait une erreur lors de l'exécution de tests et de les remonter que le retour à un problème avec la version 1.8 de cobertura.
Donc, j'ai mis à jour
autres dépendances
1. jakarta-oro 2.0.8
2. log4j-1.2.9
Après qui a couru de nouveau la tâche et les rapports étaient très bien.
OriginalL'auteur Mukul Goel