1

次のプロジェクト構造があります。

  • src/com/dummy/abc.java
  • src_tests/come/dummy/abcTest.java
  • build.xml

emma を使用したテストによって実行されたコードのカバレッジを確認する必要があります。emma + junit の例を読んで、レポートを取得するには次のことを行う必要があるという結論に達しました。

  1. 「src」をコンパイルする
  2. 「src_tests」をコンパイルします
  3. コンパイルされた計測器 'src_tests' => 'instrumented_src_tests'
  4. 追加のjvmargを使用して「instrumented_src_tests」でjunitを実行します

問題は、ステップ 4 である種のファイルが返され、それを「report」コマンドで使用してレポートを作成する必要があることです。私は得ています

emma-report:
   [report] processing input files ...
   [report] 1 file(s) read and merged in 67 ms
   [report] nothing to do: no runtime coverage data found in any of the data files

~ 編集 build.xml を添付しています

<?xml version="1.0" encoding="UTF-8"?>

<project name="HELL scream" default="all" basedir=".">
    <property name="build.sources.dir" location="${basedir}/src"/>
    <property name="build.sources.des" location="${basedir}/bin/classes"/>
    <property name="test.sources.dir" location="${basedir}/src_test"/>
    <property name="test.sources.des" location="${basedir}/bin/classes_test"/>
    <property name="test.reports.des" location="${basedir}/reports-junit"/>
    <property name="emma.sources.des" location="${basedir}/bin/classes_emma"/>
    <property name="emma.reports.des" location="${basedir}/reports-emma"/>
    <property name="emma.final.reports.des" location="${basedir}/reports-emma/final"/>
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <path id="emma.lib" >
        <fileset dir="/home/user1/Desktop/emma-2.0.5312/lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <target name="clean-all">
        <delete failonerror="false">
            <fileset dir="${emma.final.reports.des}"/>
            <fileset dir="${emma.reports.des}"/>
            <fileset dir="${emma.sources.des}"/>
            <fileset dir="${test.reports.des}"/>
            <fileset dir="${test.sources.des}"/>
            <fileset dir="${build.sources.des}"/>
        </delete>
    </target>
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <target name="compile-sources">
        <mkdir dir="${build.sources.des}"/>
        <javac srcdir="${build.sources.dir}" includes="" excludes="" destdir="${build.sources.des}" listfiles="true" debug="true" includeantruntime="false"/>
    </target>  
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->   
    <target name="compile-tests">
        <mkdir dir="${test.sources.des}"/>
        <javac srcdir="${test.sources.dir}" includes="" excludes="" destdir="${test.sources.des}" listfiles="true" debug="true" includeantruntime="false">
            <classpath>
                <pathelement location="/home/user1/Desktop/junit-4.10.jar"/>
                <pathelement location="${build.sources.des}"/>
            </classpath>
        </javac>
    </target> 
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <target name="compile-emma-tests">
        <emma enabled="true" >
            <instr instrpath="${test.sources.des}" destdir="${emma.sources.des}" metadatafile ="${emma.reports.des}/instrumentation.emma" merge ="true"/>
        </emma>
    </target>
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> 
    <target name="run-tests">
        <mkdir dir="${test.reports.des}"/>
        <junit haltonfailure="no" showoutput="yes" printsummary="true">            
            <formatter type="plain" usefile="false" />
            <formatter type="xml"/>
            <classpath>
                <pathelement location="/home/user1/Desktop/junit-4.10.jar"/>
                <pathelement location="${build.sources.des}"/>  
                <pathelement location="${emma.sources.des}"/>                
                <path refid="emma.lib" />
            </classpath>

            <batchtest todir="${test.reports.des}" fork="true">
                <fileset dir="${emma.sources.des}"/>
            </batchtest>                       

            <jvmarg value="-Demma.coverage.out.file=${emma.reports.des}/coverage.emma" />
            <jvmarg value="-Demma.coverage.out.merge=false" />
        </junit>            
    </target>
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <target name="junit-tests-report">
        <junitreport todir="${test.reports.des}">
            <fileset dir="${test.reports.des}">
                <include name="TEST-*.xml"/>
           </fileset>

           <report format="frames" todir="${test.reports.des}/junit_reports"/>
       </junitreport>
    </target> 
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <target name="emma-tests-report">
        <emma enabled="true" >
            <report sourcepath="${build.sources.dir}">    
                <fileset dir="${emma.reports.des}" >
                    <include name="*.emma" />
                </fileset>

                <txt outfile="${emma.final.reports.des}/coverage.txt" depth="package" columns="class,method,block,line,name" />
                <xml outfile="${emma.final.reports.des}/coverage.xml" depth="package" />
                <html outfile="${emma.final.reports.des}/coverage.html" depth="method" columns="name,class,method,block,line" />
            </report>
        </emma>
    </target>
    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <target name="all" depends="clean-all, compile-sources, compile-tests, compile-emma-tests, run-tests, junit-tests-report, emma-tests-report"/>
</project>

それはおそらく些細なことです...

また、emma.sources.dest を使用すると、(唯一の) テストでこれが得られます

run-tests:
    [junit] Running com.emma.test.MathTest
    [junit] Testsuite: com.emma.test.MathTest
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] 
    [junit]     Caused an ERROR
    [junit] Illegal local variable table length 5 in method com.emma.test.MathTest.<init>()V
    [junit] java.lang.ClassFormatError: Illegal local variable table length 5 in method com.emma.test.MathTest.<init>()V
    [junit]     at java.lang.Class.forName0(Native Method)
    [junit]     at java.lang.Class.forName(Class.java:188)
    [junit] 
    [junit] Test com.emma.test.MathTest FAILED

~ 解決済み これを追加:

<jvmarg value="-XX:-UseSplitVerifier"/>
<jvmarg value="-Demma.coverage.out.file=${emma.reports.des}/coverage.emma" />
<jvmarg value="-Demma.coverage.out.merge=false" />
4

3 に答える 3

0

間違ったコマンドを使用してレポートを生成すると、このエラーが発生します。オンライン チュートリアルのほとんどは、間違った (古い可能性がある) コマンドを推奨していますが、以下のコマンドを使用してレポートを生成したときにこのエラーが発生しました。

{JAVA_HOME}\jre\lib\ext>java -cp emma.jar emma report -r html -coverage.em, {ALFRESCO_HOME}\coverage.ec EMMA: 入力ファイルを処理しています ... EMMA: 1 ファイルを読み取りましたEMMA: 何もする必要はありません: データ ファイルのいずれにもランタイム カバレッジ データが見つかりません

コマンドの正しい使用法: {JAVA_HOME}\jre\lib\ext>java -cp emma.jar emma report -r txt,html -in {JAVA_HOME}\jre\lib\ext\coverage.em -in C:\ t1_tempSetup\Alfresco\coverage.ec EMMA: 入力ファイルを処理しています ... EMMA: 70 ミリ秒で 2 つのファイルを読み取り、マージしました EMMA: [txt] レポートを [{JAVA_HOME}\jre\lib\ext\coverage.txt に書き込みます] ... EMMA: [html] レポートを [{JAVA_HOME}\jre\lib\ext\coverage\index.html] に書き込んでいます ...

于 2015-10-19T18:28:51.850 に答える