適切にJavaを使用Eclemmaカバレッジを実行する方法

vesii:

私たちは、Java以外のテストを使用しています。それらの一つ一つは、Javaで書かれている私たちのツールを実行します。私はテストのカバレッジレポートを作成するためのEclemmaを使用しようとしています。一つの試験で始めることができます。私たちは、とのコードをコンパイルbuild.xml私は、各テストのカバレッジレポートを作成するために、その後1つのメインレポートにマージするために何とかしたいと思います。私がいることが分かったインターフェースJacocoはCMDを持って、私はそれらのレポートをマージするために使用することができます。しかし、私はカバレッジ・パッケージでツールを実行しない方法を理解していませんか?

  1. 私はどちらのカバレッジパッケージを使用する必要がありますか?それはEclemmaまたはJacocoですか?
  2. どのように私は、カバレッジ・パッケージにツールを実行していますか?私は、build.xmlファイルにそれを追加すべきか?私は、コマンドラインに追加すべきか?

私はJavaでカバレッジの全体的なアイデアについて混乱ビットです。例えばPythonやPerlなどの動的languesでは、私はちょうどカバレッジレポートを作成カバレージモジュールでコードを実行します。

我々はツールを実行するために使用するコマンド:

gandu -vm /usr/pkgs/java/1.6.0.25-64/bin/java -configuration /.ganduData -data /.ganduData -configuration /ganduInternalConfig --session_id 1582722179

私はいくつかのオプションを追加する必要がありますか?

ビルドでbuild.xml

<target name="pde-build" depends="clean, init">
    <java classname="org.eclipse.equinox.launcher.Main" fork="true" failonerror="true">
        <arg value="-application" />
        <arg value="org.eclipse.ant.core.antRunner" />
        <arg value="-buildfile" />
        <arg value="${eclipseLocation}/plugins/org.eclipse.pde.build_${pdeBuildPluginVersion}/scripts/productBuild/productBuild.xml" />
        <arg value="-Dtimestamp=${timestamp}" />
        <classpath>
            <pathelement location="${eclipseLocation}/plugins/org.eclipse.equinox.launcher_${equinoxLauncherPluginVersion}.jar" />
        </classpath>
    </java>
</target>

私は、次のコマンドを追加すべきか?

<arg value="-autVMArgs" />      
<arg value="-Xmx800m;-XX:MaxPermSize=600M;-javaagent:${jacoco-agent-path}=destfile=${jacoco-report},append=true"/>

アップデート:私は、CLIを使用してレポートを作成するために管理している2人の回答に感謝します。しかし、それはそれショー(ほぼ)ゼロカバレッジのように見えます。それは私が(彼らはstdoutに印刷された)が実行されていることを確認することを印刷された線の上に赤(発見)を示しています。

このプロジェクトは、多くのパッケージが含まれていますが、最初の試みのために私は、特定のパッケージのカバレッジレポートを作成しようとしています。私が走りました。

gandu -vm /usr/pkgs/java/1.6.0.25-64/bin/java -configuration /.ganduData -data /.ganduData --session_id 1583967465 -vmargs -Xmx256m -Xms128m -javaagent:/jacoco_coverage/jacoco-0.8.5/lib/jacocoagent.jar

その後、私が走りました。

/usr/pkgs/java/1.6.0.16-64/bin/java -jar /jacoco_coverage/jacoco-0.8.5/lib/jacococli.jar report jacoco.exec --classfiles /gandu_repo/com.core.gandu/bin/ --html temp_dir --sourcefiles /gandu_repo/com.core.gandu/src/

出力:

[WARN] Some classes do not match with execution data.
[WARN] For report generation the same class files must be used as at runtime.
[WARN] Execution data for class <PATH> does not match.
[INFO] Analyzing 8 classes.

私は悩みの理解を持っているかclassfilessourcefiles私はカバレッジを上取得しようとしているというファイルがありますApplicationbin、私はいくつかの内部のフォルダを持っているApplication.classし、中にsrc私はいくつかの内部のフォルダを持っていますApplication.java私も、これらのファイルのフルパスを追加しようとしましたclassfilesし、sourcefilesまだカバレッジ(すべて赤)がありません。何が問題になるだろうか?ツールの構造:ルートは、パッケージの多く含まれており、それぞれがフォルダを持っているbinsrcそれぞれのsrcJavaファイルを再帰的にフォルダが含まれています。bin以下のために同じ構造を有するclassファイルを。

ゴダン:

私が知っているように、Javaのエージェントを追加するための唯一の場所は、ユニットテストの構成です。

エージェントは、テスト対象のアプリケーションを実行するJVMに追加する必要があります。あなたの混乱は、おそらく通常のユニットテストは、テスト対象のコードと同じJVMで実行されているという事実から来ています。

アプリケーションとJVMが開始されたかは不明あなたの説明から。

ただし、次の考慮src/Main.javaの例として:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

  public static void main(String[] args) throws Exception {
    String input;
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
      input = reader.readLine();
    }
    if ("hello".equals(input)) {
      System.out.println("Hello, World!");
    }
  }

}

コンパイル後

javac -d classes src/Main.java

このアプリケーションは、とJVMで実行することができJaCoCoのJavaエージェントから取らJaCoCoのzip配布、次のよう

java -javaagent:jacoco/lib/jacocoagent.jar -cp classes Main

そして、テストが実行されている - 例えば、「こんにちは」の場合、この手入力で。

JVMの正常な終了後、あなたが買ってあげるjacoco.execファイルを。

この渡すことjacoco.execに、ソースファイルとクラスファイルをJaCoCoコマンドラインインタフェースは、HTMLレポートを作成できます。

java -jar jacoco/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report

報告書

私はどちらのカバレッジパッケージを使用する必要がありますか?それはEclemmaまたはJacocoですか?

EclEmmaはJaCoCoに基づいてのEclipse IDE用のプラグインです。

テストのためにあなたは、Eclipse IDEからアプリケーションを実行するなら、あなたはEclEmmaを使用してJaCoCoでそれを開始することができます。ここでのEclipse IDEで実行同じ例は次のとおりです。

EclEmma

しかし、これは、このようなAntのビルドなど他のシナリオには適していません。

どのように私は、カバレッジ・パッケージにツールを実行していますか?私は、build.xmlファイルにそれを追加すべきか?私は、コマンドラインに追加すべきか?

テストのためにアプリケーションがANTで実行された場合、その後、あなたが使用することができます-これは、あなたのアプリケーションを実行する方法によって異なりJaCoCo Antタスクのレポートのエージェントと世代を設定するため。例はここにあるようbuild.xmlに同じレポートを生成したAntのためにsrc/Example.java上記のコマンドのように:

<project xmlns:jacoco="antlib:org.jacoco.ant" name="Example Ant Build with JaCoCo" default="rebuild">

  <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
    <classpath path="jacoco/lib/jacocoant.jar"/>
  </taskdef>

  <target name="clean">
    <delete dir="classes"/>
    <delete dir="report"/>
    <delete file="jacoco.exec"/>
  </target>

  <target name="compile">
    <mkdir dir="classes"/>
    <javac srcdir="src" destdir="classes" debug="true" includeantruntime="false"/>
  </target>

  <target name="run" depends="compile">
    <jacoco:agent property="jacocoAgent" />

    <java classname="Main" fork="true">
      <classpath path="classes"/>
      <jvmarg value="${jacocoAgent}"/>
    </java>
  </target>

  <target name="report" depends="run">
    <jacoco:report>
      <executiondata>
        <file file="jacoco.exec"/>
      </executiondata>
      <structure name="JaCoCo Ant Example">
        <classfiles>
          <fileset dir="classes"/>
        </classfiles>
        <sourcefiles encoding="UTF-8">
          <fileset dir="src"/>
        </sourcefiles>
      </structure>
      <html destdir="report"/>
    </jacoco:report>
  </target>

  <target name="rebuild" depends="clean,report"/>

</project>

アプリケーションはいくつかのカスタム手作りのツールによって実行されている場合は、多分直接コマンドラインにエージェントを追加する方がよいです。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=446238&siteId=1