2012-04-10 8 views
1

私はEmmaを使用する初心者です。私は、EARプロジェクトのモジュール用のJUnitテストケース用のemma antタスクを追加しようとしています。私はここにいくつか質問があります。ant build.xmlのJUnitでのEmmaの使用

  • 私はEARプロジェクターのパッケージングに計装クラスを使用する必要がありますか?
  • junitのemma antタスクを追加するにはどうすればよいですか? emmarun:on-th-flyモードまたはオフラインモードを使用する必要がありますか? JUnitの場合、forkまたはno forkを使用する必要がありますか?

私はEmmaオフラインモードを使用しており、Junitはフォークを使用しています。ここに私のbuild.xml

<!--Target and task for EMMA --> 
<taskdef resource="emma_ant.properties" classpathref="Emma.libraryclasspath" /> 
<target name="emma" description="turns on EMMA's instrumentation/reporting" > 
    <property name="emma.enabled" value="true" /> 
    <mkdir dir="${out.instr.dir}" /> 
    <property name="emma.filter" value="" /> 
</target> 

<target name="test" depends="init, compile" description="Run JUnit Test cases under emma environment"> 
    <!-- Emma instrumentation --> 
    <emma enabled="${emma.enabled}" verbosity="verbose"> 
     <instr instrpath="${class.dir}" 
        destdir="${out.instr.dir}"   
        metadatafile="${coverage.dir}/metadata.em" 
        merge="true" 
        mode="copy"> 
      <filter value="${emma.filter}" /> 
     </instr> 
    </emma> 

    <!-- JUnit Start --> 
    <junit printsummary="yes" fork="yes"> 
     <test name="com.hf.platform.authorizer.WebTxnAuthorizerTest" todir="${test.report.dir}"> 
      <formatter type="xml"/> 
     </test> 
     <classpath> 
      <path refid="HFPlatformWeb.classpath"/> 
      <path refid="Emma.libraryclasspath"/> 
     </classpath> 
     <jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.ec" /> 
     <jvmarg value="-Demma.coverage.out.merge=false" /> 
    </junit> 
    <!-- Junit End --> 

    <emma enabled="${emma.enabled}" verbosity="verbose"> 
     <report> 
      <sourcepath> 
       <dirset dir="${basedir}"> 
        <include name="src"/> 
        <include name="test-src"/> 
       </dirset> 
      </sourcepath> 
      <fileset dir="${coverage.dir}"> 
       <include name="*.em"/> 
       <include name="*.ec"/> 
      </fileset> 
     <xml outfile="${coverage.report.dir}/report.xml" /> 
     <txt outfile="${coverage.report.dir}/report.txt" /> 
     <html outfile="${coverage.report.dir}/report.html" /> 
     </report> 
    </emma> 

</target> 

私は1回のテストでそれを実行しても、レポートは生成されません。しかし、私がEclEmmaで同じユニットテストを実行したとき、正しい出力が得られます。

+0

eclEmmaもAntタスクを有するコードカバレッジ、幾分決してアプローチである、[jacoco](http://www.eclemma.org/jacoco/index.html)を使用します。 – oers

答えて

2

上記の例では、二つのこと

  1. .ECでmetadatafileとカバレッジレポートファイルのファイルパス、次のことを確認する必要があり、.EMまたは.emmaファイルは絶対パスまたはプロジェクトからの相対でなければなりません。例:
  2. インストルメンテーションタスクとレポートタスクの間に挟まれたjava/junitタスクを実行するには、インストルメント済みのクラスファイルパスを使用する必要があります。例:

    <classpath> <pathelement location="${out.instr.dir}" /> <path refid="Emma.libraryclasspath"/> <path refid="HFPlatformEJB.classpath"/> </classpath>

関連する問題