1

私はEmmaを使う初心者です。EARプロジェクトのモジュールのJUnitテストケースに重要なタスクを追加しようとしています。ここで質問はほとんどありません。

  • EARプロジェクトのパッケージ化にインストルメントクラスを使用する必要がありますか?
  • junitにemmaantタスクを追加する良い方法は何ですか?emmarun:on-th-flyモードまたはオフラインモードを使用する必要がありますか?JUnitの場合、フォークを使用する必要がありますか、それともフォークを使用しないでください。

EmmaオフラインモードとJunitwithforkを使用しています。これが私の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で同じ単体テストを実行すると、正しい出力が得られます。

4

1 に答える 1

2

上記の例では、次の2つのことを確認する必要があります

  1. .ec、.em、または.emmaファイルであるmetadatafileおよびカバレッジレポートファイルのファイルパスは、絶対またはプロジェクトに対して相対的である必要があります。例えば
  2. インストルメンテーションタスクとレポートタスクの間に挟まれたjava/junitタスクを実行するには、インストルメンテーションされたクラスファイルパスを使用する必要があります。例えば

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

于 2012-04-23T11:42:57.333 に答える