Emma in Ant for ofline


1.ema libをダウンロードする
http://sourceforge.net/projects/emma/files/emma-release/2.0.5312/emma-2.0.5312.zip/download
私はemaをダウンロードしました。
2.解凍ema-2.05.312.zipにはlibディレクトリがあり、2つのjarファイルが含まれています。
ema.jar
emaant.jar:Emma taskdefsを含んでいます。
この二つのファイルはプロジェクトのlib倉庫に入れます。build.xmlにpath elementを設定して、ANt呼び出しに便利です。
<!-- directory that contains emma.jar and emma_ant.jar: -->
  <property name="emma.dir" value="${basedir}/../lib" />

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

  <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
2.offineモードは、まずコードのカバーが必要なクラスファイルにバイトコードを追加します。
<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="emma.add.bytecode" depends="init, compile" description="Emma add bytecode to classes" >
    <emma enabled="${emma.enabled}" >
      <instr instrpathref="run.classpath"
             destdir="${out.instr.dir}" 
             metadatafile="${coverage.dir}/metadata.emma"
             merge="true">
        <filter includes="classes name or classes package which you want to coverage">
        <filter excludes="classes name or classes package which you do not want to coverage">
        <filter value="+classes, -classes">
        <filter file="filter.txt">
      </instr>
    </emma>
  </target>
注:
(1)instrはemaのバイトコード挿入器で、コンパイルされたclasesディレクトリの中でcoverageを必要とするclassファイルをbytecodeに挿入し、copyから
$out.instr.dirディレクトリは、metadata.emaファイルを生成します。
(2)filterは、どのクラスの必要性に合致するか、またはcoverageを必要としないかについて、includes\excludes\value\fileといういくつかの方法で*マッチングをサポートします。file方式のファイルはこのようにすることができます。
この類はcoverageを必要としないという意味です。
-comp.foo.test.*
同前+必要を表します
+comp.foo.*
3.コードを実行したり、junnitを実行してコードを実行したりします。ここではemaダウンロードパッケージに持参されたexampleを例にして実行コードです。2つのjvmargを追加して、運行コードのカバー率ファイルをcoverage.emaで生成したり、生成された内容はmerge方式です。
<target name="run" depends="emma.add.bytecode" description="Execute code or run junit test">
    <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>
  </target>
4.レポートを生成し、前の2ステップのmetadata.emaとcoverage.emaの2つのファイルからtxtとhtmlの2つのフォーマットのレポートを生成する。
  <target name="emma.report" depends="run" description="Generate the emma report">
    <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>
<report>のsourcepathはソースコードディレクトリを指定するために使用されています。これで、どのコードがcoverageによって参照されますか?
その他のいくつかのパラメータ:
depth:レポートの細さをどの階に指定するかは、以下の値になります。
    * all.
    * package
    * source
    * クラス
    * method
encoding:レポートの文字セットを指定します。
参考:
http://emma.sourceforge.net/userguide_single/userguide.
http://emma.sourceforge.net/reference_single/reference.httm
原文の住所:http://hi.baidu.com/lettoo/blog/item/da98a0038edaaae708fa93cd.html