Bonjour,
Je suis en train de réaliser des scripts Ant pour mes projets, et j'ai un problème lors de l'instrumentation des classes pour Cobertura.
Mon projet principal est MyProject. J'ai un second projet, MyProjectTest, qui teste les méthodes des classes de MyProject.
Ces deux projets ont des fichiers build.xml.
Voici la struture des répertoires de ces 2 projets :
Voici le fichier build.xml de MyProjectTest :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MyProject - src : contient toutes les sources (.java) - build - classes : toutes les classes compilées (.class), organisées par packages - lib : toutes les bibliothèques externes utilisées (.jar) - lib : toutes les bibliothèques externes utilisées (.jar) build.xml build.properties MyProjectTest - src : contient toutes les sources de test des classes de MyProject (.java) - build : toutes les classes compilées (.class), organisées par packages - lib : toutes les bibliothèques externes utilisées par MyProject (.jar), plus le dossier cobertura-1.9.4.1 build.xml
Voici enfin mon problème : Cobertura ne me donne aucune information de couverture de code. Il m'affiche N/A partout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 <project name="Unit Tests"> <!-- ========== --> <!-- Properties --> <!-- ========== --> <property name="src.java.dir" value="./src" /> <property name="lib.dir" value="./lib" /> <property name="build.root" value="./build" /> <property name="dist.root" value="./dist" /> <property name="myproject.location" value="../MyProject"/> <property name="cobertura.dir" value="${lib.dir}/cobertura-1.9.4.1" /> <property name="instrumented.dir" value="instrumented-bin" /> <property name="cobertura.report.dir" value="report-cobertura" /> <!-- ===== --> <!-- Paths --> <!-- ===== --> <path id="junit"> <pathelement location="${lib.dir}/junit-4.8.2.jar" /> </path> <path id="myproject.classpath"> <pathelement location="${myproject.location}/build/classes"/> <fileset dir="${myproject.location}/lib"> <include name="**/*.jar" /> </fileset> </path> <path id="tests.classpath"> <pathelement location="build"/> <path refid="junit"/> <path refid="myproject.classpath"/> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> </path> <path id="cobertura.classpath"> <fileset dir="${cobertura.dir}"> <include name="cobertura.jar" /> <include name="lib/**/*.jar" /> </fileset> </path> <!-- Classpath of the files to instrument --> <path id="instrument.classpath"> <fileset dir="${myproject.location}/build/classes"> <include name="**/*.class" /> </fileset> </path> <!-- Defines the directory where to find the instrumented classes --> <path id="instrumented.classpath"> <pathelement location="${instrumented.dir}"/> </path> <taskdef classpathref="cobertura.classpath" resource="tasks.properties" /> <!-- ======= --> <!-- Targets --> <!-- ======= --> <target name="clean-all"> <delete dir="${build.root}" quiet="true" /> <delete dir="${dist.root}" quiet="true" /> </target> <target name="compile" depends="clean-all"> <mkdir dir="${build.root}" /> <javac srcdir="${src.java.dir}" destdir="${build.root}" debug="true" debuglevel="vars,lines,source"> <classpath refid="tests.classpath" /> </javac> </target> <target name="unitTests"> <junit fork="true" printsummary="true"> <classpath refid="cobertura.classpath"/> <classpath refid="instrumented.classpath"/> <classpath refid="tests.classpath" /> <formatter type="xml" /> <test name="tests.AllTests" /> </junit> </target> <target name="instrumentClasses" depends="compile"> <delete file="cobertura.ser" /> <cobertura-instrument todir="${instrumented.dir}"> <includeClasses regex=".*" /> <instrumentationclasspath refid="instrument.classpath"/> </cobertura-instrument> </target> <target name="cobertura" depends="instrumentClasses, unitTests"> <cobertura-report destdir="${cobertura.report.dir}"> <fileset dir="${myproject.location}/src"> <include name="**/*.java" /> </fileset> </cobertura-report> </target> </project>
Dans la console, lors de l'exécution de la target cobertura, j'ai la sortie suivante :
J'ai des WARN pour toutes mes classes qui me disent que mes classes sont mal instrumentées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Buildfile: C:\Users\Romain\workspace\MyProjectTest\build.xml clean-all: [delete] Deleting directory C:\Users\Romain\workspace\MyProjectTest\build compile: [mkdir] Created dir: C:\Users\Romain\workspace\MyProjectTest\build [javac] Compiling 6 source files to C:\Users\Romain\workspace\MyProjectTest\build instrumentClasses: [delete] Deleting: C:\Users\Romain\workspace\MyProjectTest\cobertura.ser [cobertura-instrument] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file [cobertura-instrument] Instrumenting 39 files to C:\Users\Romain\workspace\MyProjectTest\instrumented-bin [cobertura-instrument] WARN visitEnd, No line number information found for class myproject.CoreMetaData. Perhaps you need to compile with debug=true? [cobertura-instrument] WARN visitEnd, No line number information found for class myproject.CoreState. Perhaps you need to compile with debug=true? [cobertura-instrument] WARN visitEnd, No line number information found for class myproject.Internationalization. Perhaps you need to compile with debug=true? [cobertura-instrument] WARN visitEnd, No line number information found for class myproject.MailElements. Perhaps you need to compile with debug=true? [cobertura-instrument] WARN visitEnd, No line number information found for class myproject.Resume$ResumeResult. Perhaps you need to compile with debug=true? [cobertura-instrument] WARN visitEnd, No line number information found for class myproject.Resume. Perhaps you need to compile with debug=true? [...] [cobertura-instrument] Cobertura: Saved information on 39 classes. [cobertura-instrument] Instrument time: 268ms unitTests: [junit] Running tests.AllTests [junit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 1,057 sec cobertura: [cobertura-report] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file [cobertura-report] Cobertura: Loaded information on 39 classes. [cobertura-report] Report time: 721ms BUILD SUCCESSFUL Total time: 4 seconds
En cherchant sur le net je n'ai pas vu beaucoup d'infos mais pour certaines personnes ça ne le fait qu'avec les classes internes. Moi ça le fait avec absolument toutes les classes du projet.
D'autre part je compile en mode debug, mais ça ne change rien dans mon cas.
Voyez-vous d'où peut venir mon erreur ? (Sachant que j'ai un autre script ant cobertura pour un autre projet et qu'il marche très bien)
Merci
EDIT :
Pour une raison qui m'échappe, lorsque j'exécute mon build.xml aujourd'hui, j'obtiens la sortie suivante sur la console :
Je n'ai plus les erreur visitEnd, No line number ..., alors que je n'ai rien changé au fichier build.xml ![...]
instrumentClasses:
[delete] Deleting: C:\Users\Romain\workspace\MyProjectTest\cobertura.ser
[cobertura-instrument] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
[cobertura-instrument] Instrumenting 39 files to C:\Users\Romain\workspace\MyProjectTest\instrumented-bin
[cobertura-instrument] Cobertura: Saved information on 39 classes.
[cobertura-instrument] Instrument time: 150ms
Cependant je n'arrive toujours pas à faire marcher cobertura : le dossier instrumented-bin reste désespérément vide
EDIT 2 : Je m'y suis pris autrement => je mets mes tests et les sources de mon projet principal dans un seul et même projet.
Cependant j'ai de nouveau l'erreur d'hier : visitEnd, No line number ...
Partager