2008-09-09 13 views

Respuesta

14

Para responder a preguntas acerca de dónde la fuente y directorios instrumentados son (estos se pueden cambiar a lo que su estructura de directorios estándar es):

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

rutas de clases:

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

Lo primero que necesita para configurar donde Ant puede encontrar las bibliotecas de Emma:

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

Luego importe la tarea:

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

Entonces instrumento el código:

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

A continuación, ejecute un objetivo con los argumentos de VM propios como:

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

Finalmente generar el informe:

<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

No parece que haya definido $ {} la cobertura –

0

Emma 2.1 introduce otra forma de f obtener información de cobertura de tiempo de ejecución (archivo .ec). Uno puede solicitar remotamente los datos del puerto dado de la computadora donde se ejecuta una aplicación instrumentada. Entonces no hay necesidad de detener VM.

para obtener el archivo con los datos de tiempo de ejecución de la cobertura tiene que insertar el siguiente fragmento en el script Ant entre el funcionamiento de sus pruebas y el informe de la cobertura de generación:

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

Otros pasos son similares a Emma 2.0. Están perfectamente descritos en previous post

Más información sobre Emma 2.1 Características: http://sourceforge.net/project/shownotes.php?group_id=108932&release_id=336859

2

El User Guide has a good example of how to set up your build script de modo que usted no sólo separada del código instrumentado de la ejecución, pero también es todo lo contenido en la misma <target> para que Don No tiene que ejecutar una serie de objetivos diferentes, sino que puede hacer algo como ant emma tests (si ant tests fue la forma en que normalmente realizó las pruebas de su unidad, por ejemplo).

Aquí es su ejemplo:

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