私たちは、Java以外のテストを使用しています。それらの一つ一つは、Javaで書かれている私たちのツールを実行します。私はテストのカバレッジレポートを作成するためのEclemmaを使用しようとしています。一つの試験で始めることができます。私たちは、とのコードをコンパイルbuild.xml
。私は、各テストのカバレッジレポートを作成するために、その後1つのメインレポートにマージするために何とかしたいと思います。私がいることが分かったインターフェースJacocoはCMDを持って、私はそれらのレポートをマージするために使用することができます。しかし、私はカバレッジ・パッケージでツールを実行しない方法を理解していませんか?
- 私はどちらのカバレッジパッケージを使用する必要がありますか?それはEclemmaまたはJacocoですか?
- どのように私は、カバレッジ・パッケージにツールを実行していますか?私は、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.
私は悩みの理解を持っているかclassfiles
とsourcefiles
。私はカバレッジを上取得しようとしているというファイルがありますApplication
。でbin
、私はいくつかの内部のフォルダを持っているApplication.class
し、中にsrc
私はいくつかの内部のフォルダを持っていますApplication.java
。私も、これらのファイルのフルパスを追加しようとしましたclassfiles
し、sourcefiles
まだカバレッジ(すべて赤)がありません。何が問題になるだろうか?ツールの構造:ルートは、パッケージの多く含まれており、それぞれがフォルダを持っているbin
とsrc
。それぞれのsrc
Javaファイルを再帰的にフォルダが含まれています。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で実行同じ例は次のとおりです。
しかし、これは、このような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>
アプリケーションはいくつかのカスタム手作りのツールによって実行されている場合は、多分直接コマンドラインにエージェントを追加する方がよいです。