Frage

Wie richte ich eine zu generierende Ant-Aufgabe ein? Emma Codeabdeckungsberichte?

War es hilfreich?

Lösung

So beantworten Sie Fragen dazu, wo sich die Quell- und instrumentierten Verzeichnisse befinden (diese können auf Ihre Standardverzeichnisstruktur umgestellt werden):

<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 müssen Sie festlegen, 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 instrumentieren Sie den 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>

Führen Sie dann ein Ziel mit den richtigen VM-Argumenten aus, z. B.:

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

Erstellen Sie abschließend Ihren Bericht:

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

Andere Tipps

Der Das Benutzerhandbuch enthält ein gutes Beispiel für die Einrichtung Ihres Build-Skripts sodass Sie nicht nur den instrumentierten Code von der Ausführung trennen, sondern auch alles darin enthalten ist <target> sodass Sie nicht eine Reihe verschiedener Ziele ausführen müssen, sondern einfach so etwas tun können ant emma tests (Wenn ant tests So führten Sie zum Beispiel normalerweise Ihre Unit-Tests durch.

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>

Emma 2.1 führt eine weitere Möglichkeit ein, Informationen zur Laufzeitabdeckung zu erhalten (.ec-Datei).Man kann die Daten aus der Ferne über den angegebenen Port des Computers anfordern, auf dem eine instrumentierte Anwendung ausgeführt wird.Es besteht also keine Notwendigkeit, VM zu stoppen.

Um die Datei mit Laufzeitabdeckungsdaten zu erhalten, müssen Sie zwischen der Ausführung Ihrer Tests und der Erstellung des Abdeckungsberichts den folgenden Ausschnitt in Ihr Ant-Skript einfügen:

<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 ähneln Emma 2.0.Sie sind perfekt beschrieben in vorherigen Post

Weitere Informationen zu den Funktionen von Emma 2.1: http://sourceforge.net/project/shownotes.php?group_id=108932&release_id=336859

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top