2008-09-09 12 views

Antwort

14

um Fragen zu beantworten, wo die Quelle und instrumentiert Verzeichnisse werden (diese können zu was auch immer Ihre Standard-Verzeichnisstruktur geschaltet werden soll):

<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" /> 

Klassenpfade:

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

Zuerst Sie einrichten müssen wo Ant die Emma-Bibliotheken finden kann:

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

Dann importieren Sie die Aufgabe:

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

Dann Instrument der 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> 

Dann ein Ziel mit den richtigen VM Argumente wie laufen:

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

Schließlich Ihren Bericht generieren:

<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

sieht nicht, wie Sie $ {} Abdeckung definiert –

0

Emma 2.1 führt einen anderen Weg ein o f Erhalten von Informationen zur Laufzeitabdeckung (.ec-Datei). Man kann die Daten von dem gegebenen Port des Computers, auf dem eine instrumentierte Anwendung läuft, aus der Ferne anfordern. Es ist also nicht notwendig, VM anzuhalten.

Um die Datei mit Laufzeit Abdeckungsdaten erhalten Sie folgenden Code-Schnipsel in Ihrem Ant-Skript zwischen Betrieb Ihres Tests und zum Erzeugen Berichterstattung Bericht einfügen müssen:

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

Andere Schritte zu Emma 2.0 ähnlich sind. Sie sind perfekt in previous post

Mehr Informationen über Emma 2.1-Funktionen beschrieben: http://sourceforge.net/project/shownotes.php?group_id=108932&release_id=336859

2

Die User Guide has a good example of how to set up your build script so dass Sie nicht nur trennen die instrumentierte Code aus der Ausführung, aber es ist auch alles in der gleichen <target> enthalten, so dass Sie don Sie müssen nicht eine Reihe von verschiedenen Zielen ausführen, aber Sie können einfach etwas wie ant emma tests (wenn ant tests war, wie Sie normalerweise Ihre Komponententests zum Beispiel ausgeführt haben).

Hier ist ihr Beispiel:

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