2010-02-23 19 views
1

Je script suivant:Comment modifier le script Ant avec la couverture de code EMMA afin qu'il puisse trouver des données de couverture d'exécution?

<?xml version="1.0" encoding="UTF-8"?> 

<taskdef resource="emma_ant.properties"> 
    <classpath>    
     <pathelement location="lib/emma.jar" /> 
     <pathelement location="lib/emma_ant.jar" /> 
    </classpath> 
</taskdef> 

<target name="compile"> 
    <mkdir dir="build"/> <!-- vytvori adresar build --> 
    <mkdir dir="build/classes"/> 
    <mkdir dir="build/test"/> 
    <javac destdir="build/classes" srcdir="src" debug="true" /> <!-- prelozi zdrojove kody --> 
    <javac destdir="build/test" srcdir="test"> <!-- prelozi testy --> 
     <classpath> <!-- pro prelozeni testu je potreba junit a prelozena aplikace --> 
      <pathelement location="lib/junit-4.5.jar" /> 
      <pathelement location="build/classes" /> 
     </classpath> 
    </javac> 
</target> 

<target name="build" depends="compile"> 
    <jar destfile="tetris.jar" basedir="build/classes"> <!-- zabali aplikaci do jaru --> 
     <manifest> 
      <attribute name="Main-Class" value="tetris.Main"/> 
      <attribute name="Class-Path" value="lib/mysql-connector-java-5.1.6-bin.jar lib/derbyclient.jar"/> 
     </manifest> 
    </jar> 
</target> 

<target name="jar" depends="build"></target> 

<target name="run" depends="compile"> 
    <java classname="tetris.Main" classpath="build/classes"> <!-- spusti aplikaci --> 
     <classpath> 
      <pathelement location="lib/mysql-connector-java-5.1.6-bin.jar" /> 
      <pathelement location="lib/derbyclient.jar" /> 
     </classpath> 
    </java> 
</target> 

<target name="instrument" depends="compile"> 
    <mkdir dir="build/instrumented"/> 

    <emma verbosity="verbose"> <!-- vytvori tridy upravene pro sledovani coverage --> 
     <instr instrpath="build/classes" 
       destdir="build/instrumented" 
       metadatafile="build/metadata.emma" 
       merge="true" /> 
    </emma> 
</target> 

<target name="test" depends="instrument"> 
    <mkdir dir="reports" /> 
    <mkdir dir="reports/junit" /> 

    <junit printsummary="yes" haltonfailure="no" fork="true"> <!-- pusti JUnit testy --> 
     <classpath> 
      <pathelement location="build/test" /> 
      <pathelement location="build/classes" /> 
      <pathelement location="build/instrumented" /> 
      <pathelement location="lib/junit-4.5.jar" /> 
      <pathelement location="lib/emma.jar" /> 
      <pathelement location="lib/emma_ant.jar" /> 
     </classpath> 

     <formatter usefile="false" type="brief" /> 
     <formatter type="plain"/> 

     <batchtest fork="yes" todir="reports/junit"> <!-- reporty budou v adresari reports/junit --> 
      <fileset dir="test"> 
       <include name="**/TetrisSuite.java"/> 
      </fileset> 
     </batchtest> 
     <jvmarg value="-Demma.coverage.out.file=build/coverage.emma"/> 
     <jvmarg value="-Demma.coverage.out.merge=true" /> 
    </junit> 

    <emma enabled="true" verbosity="verbose"> <!-- vygeneruje report emmy --> 
     <report sourcepath="src"> 
      <fileset dir="build" includes="*.emma" /> 

      <html outfile="reports/coverage.html" /> 
     </report> 
    </emma> 
</target> 

<target name="clean"> 
    <delete dir="build"/> <!-- smaze adresar build --> 
    <delete dir="reports"/> 
    <delete file="tetris.jar"/> 
</target> 

Il transmet ce message:

processing input file [...NetBeansProjects/Tetris3/build/metadata.emma] ... 
    loaded 25 metadata entries 
1 file(s) read and merged in 5 ms 
nothing to do: no runtime coverage data found in any of the data files 

Quel est le problème et comment le résoudre?

+0

@Corvus - J'ai ajouté quelques réflexions - peut-être que vous n'avez rien exécuté, par exemple s'il n'y a pas de tests junit nommés TetrisSuite. –

Répondre

3

Il semble que vous récupériez les classes non instrumentées.

Peut-être parce que le classpath dans votre tâche junit a les classes compilées (build/classes) avant du instrumenté (build/instrumented). Peut-être inverser ces dans ce classpath?

EDIT

Je emma téléchargé et mis en place un projet de base avec une classe source et une classe de test. J'ai essayé de l'exécuter en utilisant le build fourni dans la question. Le seul changement que j'ai fait était d'envelopper le corps dans un <project> avec test comme cible par défaut. Lors de l'exécution, je reçu un message similaire à la question:

[report] processing input file [/Users/mjc/stack_overflow/emma/build/metadata.emma] ... 
[report] loaded 1 metadata entries 
[report] 1 file(s) read and merged in 6 ms 
[report] nothing to do: no runtime coverage data found in any of the data files 

je puis définir le chemin de JUnit pour mettre les classes instrumentés avant la vanille:

<classpath> 
    <pathelement location="build/test" /> 
    <pathelement location="build/instrumented" /> 
    <pathelement location="build/classes" /> 
    <pathelement location="lib/junit.jar" /> 
    <pathelement location="lib/emma.jar" /> 
    <pathelement location="lib/emma_ant.jar" /> 
</classpath> 

et rediffusé:

[report] processing input file [/Users/mjc/stack_overflow/emma/build/coverage.emma] ... 
[report] loaded 1 coverage data entries 
[report] processing input file [/Users/mjc/stack_overflow/emma/build/metadata.emma] ... 
[report] loaded 1 metadata entries 
[report] 2 file(s) read and merged in 4 ms 
[report] merged metadata contains 1 entries 
[report] merged coverage data contains 1 entries 
[report] writing [html] report to [/Users/mjc/stack_overflow/emma/reports/coverage.html] ... 
[report] report: processing package [default package] ... 

On dirait que ça l'a corrigé pour moi. J'ai eu un test qui a couru:

[junit] Running SoTest 
[junit] Testsuite: SoTest 
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.081 sec 
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.081 sec 
[junit] 
[junit] ------------- Standard Output --------------- 
[junit] EMMA: collecting runtime coverage data ... 
[junit] ------------- ---------------- --------------- 

Si vous ne voyez pas des lignes comme ça dans la sortie ant peut-être vous avez pas de tests qui correspondent au modèle **/TetrisSuite.java?

+0

Voulez-vous dire comme ça? Cela ne semble pas fonctionner .. –

+0

@Corvus - de quelle manière cela n'a-t-il pas fonctionné? Avez-vous fait un nettoyage en premier? –

+0

Je l'ai fait nettoyer et il sort toujours "rien à faire: aucune donnée de couverture d'exécution trouvée dans l'un des fichiers de données" –