IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ANT Java Discussion :

[Ant & Cobertura] Problème d'instrumentation des classes


Sujet :

ANT Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Points : 50
    Points
    50
    Par défaut [Ant & Cobertura] Problème d'instrumentation des classes
    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 :
    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 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
    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>
    Voici enfin mon problème : Cobertura ne me donne aucune information de couverture de code. Il m'affiche N/A partout.
    Dans la console, lors de l'exécution de la target cobertura, j'ai la sortie suivante :
    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
    J'ai des WARN pour toutes mes classes qui me disent que mes classes sont mal instrumentées.
    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 :
    [...]
    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
    Je n'ai plus les erreur visitEnd, No line number ..., alors que je n'ai rien changé au fichier build.xml !
    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 ...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Points : 50
    Points
    50
    Par défaut
    Pour tous ceux qui comme moi ont eu des difficultés, il y a une solution un peu plus simple : exportez le build.xml créé par Eclipse puis ajoutez vos propres targets pour cobertura.
    Pour cela : placez-vous sur votre classe AllTests, allez dans le menu File -> Export, puis tapez Ant dans le champ de recherche. Sélectionnez Ant Buildfiles, cliquez sur Next puis sélectionnez votre projet. Cliquez sur Finish, et ça y est, le fichier build.xml d'Eclipse se trouve à la racine de votre projet.

    Note : Néanmoins si quelqu'un trouve d'où venait mon erreur je serais très intéressé, je me coucherai moins bête
    (même si vous avez la réponse 1 an après ma dernière réponse, je suis abonné à la discussion )

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 140
    Points
    140
    Par défaut Question de classpath
    J'ai eu le même problème avec netbeans.
    En fait, si je ne trompe pas il faut que les classes instrumentées se trouvent "avant" les "vrai" classe dans le classpath.
    Voir ici l'équivalent en ligne de commande.

    Ce qui m'a permis de comprendre pourquoi ca fonctionner pas :
    java -cp C:\cobertura\lib\cobertura.jar;C:\MyProject\build\instrumented;C:\MyProject\build\classes;C:\MyProject\build\test-classes -Dnet.sourceforge.cobertura.datafile=C:\MyProject\build\cobertura.ser ASimpleTestCase
    J'espère que ca aidera du monde

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [eZ Publish] Problème de traduction des class
    Par ricozor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/01/2011, 14h49
  2. [Framework] Probléme d'instanciation des classe dao et des classe service
    Par daly2009 dans le forum Spring
    Réponses: 1
    Dernier message: 03/11/2010, 14h19
  3. Problème d'extention des classes Home
    Par arthurembo dans le forum Seam
    Réponses: 1
    Dernier message: 25/08/2010, 17h00
  4. [JAXB] problème de génération des classes
    Par mog83 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 08/06/2008, 12h43
  5. Problème d'utilisation des classes
    Par CyberSlan dans le forum C++
    Réponses: 10
    Dernier message: 16/05/2008, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo