2008-09-09 6 views

Répondre

14

Pour répondre aux questions sur l'endroit où la source et les répertoires instrumentés sont (ceux-ci peuvent être activés à tout ce que la structure de votre répertoire standard est):

<property file="build.properties" /> 
<property name="source" location="src/main/java" /> 
<property name="test.source" location="src/test/java" /> 
<property name="target.dir" location="target" /> 
<property name="target" location="${target.dir}/classes" /> 
<property name="test.target" location="${target.dir}/test-classes" /> 
<property name="instr.target" location="${target.dir}/instr-classes" /> 

chemins de classe:

<path id="compile.classpath"> 
    <fileset dir="lib/main"> 
    <include name="*.jar" /> 
    </fileset> 
</path> 

<path id="test.compile.classpath"> 
    <path refid="compile.classpath" /> 
    <pathelement location="lib/test/junit-4.6.jar" /> 
    <pathelement location="${target}" /> 
</path> 

<path id="junit.classpath"> 
    <path refid="test.compile.classpath" /> 
    <pathelement location="${test.target}" /> 
</path> 

D'abord, vous devez configurer où Ant peut trouver les bibliothèques Emma:

<path id="emma.lib" > 
    <pathelement location="${emma.dir}/emma.jar" /> 
    <pathelement location="${emma.dir}/emma_ant.jar" /> 
</path> 

Puis importez le tâche:

<taskdef resource="emma_ant.properties" classpathref="emma.lib" /> 

Puis instrument le code:

<target name="coverage.instrumentation"> 
    <mkdir dir="${instr.target}"/> 
    <mkdir dir="${coverage}"/> 
    <emma> 
     <instr instrpath="${target}" destdir="${instr.target}" metadatafile="${coverage}/metadata.emma" mode="copy"> 
      <filter excludes="*Test*"/> 
     </instr> 
    </emma> 
    <!-- Update the that will run the instrumented code --> 
    <path id="test.classpath"> 
     <pathelement location="${instr.target}"/> 
     <path refid="junit.classpath"/> 
     <pathelement location="${emma.dir}/emma.jar"/> 
    </path> 
</target> 

Lancez ensuite une cible avec les arguments appropriés VM comme:

<jvmarg value="-Demma.coverage.out.file=${coverage}/coverage.emma" /> 
<jvmarg value="-Demma.coverage.out.merge=true" /> 

Enfin générer votre rapport:

<target name="coverage.report" depends="coverage.instrumentation"> 
    <emma> 
     <report sourcepath="${source}" depth="method"> 
      <fileset dir="${coverage}" > 
       <include name="*.emma" /> 
      </fileset> 
      <html outfile="${coverage}/coverage.html" /> 
     </report> 
    </emma> 
</target> 
+0

Ne ressemble pas à vous $ {couverture défini} –

0

Emma 2.1 introduit une autre façon de f obtenir des informations de couverture d'exécution (fichier .ec). On peut demander à distance les données du port donné de l'ordinateur où une application instrumentée est exécutée. Il n'y a donc pas besoin d'arrêter VM.

Pour obtenir le fichier avec les données de couverture d'exécution, vous devez insérer l'extrait suivant dans votre script Ant entre l'exécution de vos tests et génération de rapports de couverture:

<emma> 
    <ctl connect="${emma.rt.host}:${emma.rt.port}" > 
     <command name="coverage.get" args="${emma.ec.file}" /> 
     <command name="coverage.reset" /> 
    </ctl> 
</emma> 

D'autres étapes sont similaires à Emma 2.0. Ils sont parfaitement décrits dans previous post

Plus d'informations sur Emma 2.1 Caractéristiques: http://sourceforge.net/project/shownotes.php?group_id=108932&release_id=336859

2

Le User Guide has a good example of how to set up your build script de sorte que non seulement vous séparer le code instrumenté de l'exécution, mais il est aussi le tout dans la même <target> afin que vous ne Pas besoin d'exécuter une série de cibles différentes, mais au lieu de cela, vous pouvez simplement faire quelque chose comme ant emma tests (si ant tests était la façon dont vous avez normalement exécuté vos tests unitaires, par exemple).

Voici leur exemple:

<target name="emma" description="turns on EMMA instrumentation/reporting" > 
    <property name="emma.enabled" value="true" /> 
    <!-- EMMA instr class output directory: --> 
    <property name="out.instr.dir" value="${basedir}/outinstr" /> 
    <mkdir dir="${out.instr.dir}" /> 
</target> 

<target name="run" depends="init, compile" description="runs the examples" > 
    <emma enabled="${emma.enabled}" > 
     <instr instrpathref="run.classpath" 
      destdir="${out.instr.dir}" 
      metadatafile="${coverage.dir}/metadata.emma" 
      merge="true" 
     /> 
    </emma> 

    <!-- note from matt b: you could just as easily have a <junit> task here! --> 
    <java classname="Main" fork="true" > 
     <classpath> 
     <pathelement location="${out.instr.dir}" /> 
     <path refid="run.classpath" /> 
     <path refid="emma.lib" /> 
     </classpath> 
     <jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.emma" /> 
     <jvmarg value="-Demma.coverage.out.merge=true" /> 
    </java> 

    <emma enabled="${emma.enabled}" > 
     <report sourcepath="${src.dir}" > 
     <fileset dir="${coverage.dir}" > 
      <include name="*.emma" /> 
     </fileset> 

     <txt outfile="${coverage.dir}/coverage.txt" /> 
     <html outfile="${coverage.dir}/coverage.html" /> 
     </report> 
    </emma> 
</target> 
Questions connexes