3

次のようなマルチモジュール Maven プロジェクトを想像してください。

parent
  +- core
  +- main

mainモジュールに依存しcoreます。

と の2 つのメソッドを使用して、 にクラスCoreClassを記述します。テストでは、テストのみを行うテスト クラスを作成します。coremethod1()method2()coreCoreClass.method1()

カバレッジ ツール (私の場合は Cobertura を使用) を実行すると、テスト カバレッジの50%mvn sonar:sonarが得られることがわかります(両方のメソッドの長さが同じであると仮定した場合)。CoreClass

これまでのところ、すべて問題ありません。

ここで、mainプロジェクトで、をテストするテスト クラスを作成しCoreClass.method2()ます。したがって、通常、プロジェクト全体で分析を実行すると、ライン カバレッジが100%になると予想されます。CoreClass

しかし、私はまだ50%を取得しています。

これは包括的な動作であることを理解しています。実際、Cobertura は、モジュールではなく、モジュールでのテスト実行中にのみCoreClassカバレッジ分析用にインストルメント化します。これが、私がまだコード カバレッジの50%を保持している理由を説明しています。coremain

ただし、私の質問は、すべてのモジュールでテストを実行しているときに、実際のコード カバレッジを取得する方法があるかどうかを知ることです。CoreClass

ありがとう!

ps:完璧な世界では、クラスmainをテストすることはモジュールの関心事ではないことを私は知っています。coreしかし、ご存知かもしれませんが、私たちは完璧な世界ではありません :o)

技術情報: Java 1.6、JUnit 4.8.1、Maven 2.0.9 (まもなく 2.2.1 にアップグレードされますが、あまり重要ではないと思います)、Sonar 2.8

4

2 に答える 2

1

jacoco と sonar を使用して、すべてのモジュールに対して単一の jacoco.exec ファイル結果を取得します。ソナーはこのファイルを使用して、各モジュールの正しいカバレッジを報告します。Sonarを使用してマルチモジュールプロジェクトに使用しました

于 2011-09-24T11:56:00.333 に答える