Comment puis-je générer Emma de couverture de code de rapports à l'aide de Fourmi?

StackOverflow https://stackoverflow.com/questions/52984

  •  09-06-2019
  •  | 
  •  

Question

Comment puis-je configurer une tâche Ant pour générer des Emma des rapports de couverture de code?

Était-ce utile?

La solution

Pour répondre à des questions sur l'endroit où la source et instrumenté répertoires (il peut être commuté à ce que votre répertoire standard de la structure 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" />

Les 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>

Vous devez d'abord le programme d'installation où la Fourmi est capable de trouver le Emma bibliothèques:

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

Puis importer la tâche:

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

Ensuite, l'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>

Ensuite, exécutez une cible avec le bon VM arguments 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>

Autres conseils

L' Guide de l'utilisateur dispose d'un bon exemple de la façon de configurer votre script de construction de sorte que vous non seulement de séparer l'instrumentation du code de l'exécution, mais c'est aussi tous les contenus dans la même <target> de sorte que vous n'avez pas à 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 a la façon dont vous habituellement exécution de vos tests unitaires, par exemple).

Voici l'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>

Emma 2.1 introduit un autre moyen d'obtenir de l'exécution de la couverture de l'information (.ce fichier).On peut, à distance, demande les données à partir du port de l'ordinateur où une instrumentation de l'application est de running.Donc, il n'y a pas besoin d'arrêter la VM.

Pour obtenir le fichier avec l'exécution de la couverture des données, vous devez insérer le code suivant dans votre script Ant entre l'exécution de vos tests et de génération de rapport 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écrites dans post précédent

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top