1

依存関係管理ツールとしてIvyを使用するメイン製品のビルド プロセスにCoberturaを統合し始めたところです。いくつかのライブラリがあり、それらにはテスト ケースがなく、これらのライブラリに依存し、これらすべてのライブラリの単体テストと統合テストを含む 1 つのプロジェクトがあります。lib-alib-blib-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か?

4

1 に答える 1