依存関係管理ツールとしてIvyを使用するメイン製品のビルド プロセスにCoberturaを統合し始めたところです。いくつかのライブラリがあり、それらにはテスト ケースがなく、これらのライブラリに依存し、これらすべてのライブラリの単体テストと統合テストを含む 1 つのプロジェクトがあります。lib-a
lib-b
lib-c
通常、インストルメント化、インストルメント化されたテストの実行、および Cobertura レポートの生成は機能します。ただし、いくつかの問題があります。
計測中に、いくつかの警告 (約 10 件) が報告されます。
Problems instrumenting archive entry: a.b.c.MyClassFoo java.lang.RuntimeException: java.lang.ClassNotFoundException: a.b.c.MyClassBar
ただし、報告されたクラスは存在します。計装の最後に、それは報告します
Saved information on 364 classes
- レポートを表示すると、すべてのクラスが表示されますが、依存ライブラリのすべてのクラスが 0% のカバレッジとして報告されます。
- 詳細を表示すると、ソースが見つからないことが報告されます。
Cobertura には、jar ファイルとして提供されるクラス ファイルのインストルメント化と、jar ファイルからのソースの取得に問題がある可能性があると思います。
私の build.xml のインストルメンテーション ant タスクは、次のことを行います。
<cobertura-instrument todir="${build.dir}/instrumented-classes">
<includeClasses regex="com\.mycompany.*" />
<instrumentationClasspath>
<path refid="default.test.classpath" />
<pathelement location="${build.classes.dir}" />
</instrumentationClasspath>
</cobertura-instrument>
これで十分ですか?
報告された警告のために、私は疑問に思っています。報告されたすべてのクラスは、jar 内にあります。
2番目の問題については、ソースをjarとしてcobertura-reportに提供する方法さえ知りません...
私は試した
<cobertura-report destdir="${build.dir}/coverage">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<ivy:cachefileset conf="runtime-test" type="sources"/>
</cobertura-report>
しかし、それはcachefileset
サポートされていないと言います。pathid
では提供できない も使用してみましたcobertura-report
。事前にすべてのソースを解凍し (非常に時間がかかります)、通常どおり提供する必要がありますfileset
か?