多かれ少なかれマルチモジュールのMavenプロジェクトがあります。私はJacocoによって処理されている各モジュールの単体テストを持っています。私は "マージ"と "レポート集約"を行う別の子モジュールを持っており、これはデータを生成するように見えます。私はSonarQubeで生成されたデータを使っています。私のテストのほとんどはPowerMockを使用しており、私はオフライン計測を使用しています。jacocoは同じモジュール内のクラスのカバレッジしか表示しません
しかし、カバレッジデータを調べたところ、テスト中に実行されていることがわかっているクラスとメソッドのカバレッジデータが残っていることがわかりました。すべてのモジュールで見られるパターンは、実際に現在のモジュールにあるクラスである各モジュールの単一クラスのカバレッジのみを報告するということです。ほとんどすべてのテストは、ビルド中の他のモジュールの他のクラスにも呼び出され、それらのクラスのカバレッジは決して報告されません。
次のプラグインの設定は、それぞれの子モジュールで使用する親のポンポンである:私はモジュールごとに生成されたHTML結果を検査する場合
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>-Xmx1024m</argLine>
<includes>
<include>**/*Test.java</include>
</includes>
<systemPropertyVariables>
<jacoco-agent.destfile>${project.build.directory}/jacoco.exec</jacoco-agent.destfile>
<running-unit-test>true</running-unit-test>
</systemPropertyVariables>
</configuration>
</plugin>
、私はそれだけで一つのクラスの結果を報告することを見つけます現在のモジュールであり、他のモジュールのクラスのデータではありません。これから、別の子モジュールで "マージ"と "レポート集約"を行う方法はおそらくこの問題とは無関係であると思います。
生成された "jacoco.exec"ファイルはバイナリですが、どのモジュールが表示されているのかを見てみると、ファイル名のように見えるものは1つしか表示されませんでした。そのモジュールのHTMLカバレッジレポートで報告された唯一のファイル名でした。
報告できるその他の情報はわかりません。
更新:
私は確実な実行ユニットテストは、それが現在のモジュールからのインストルメントクラスを使用するとき、私は今、かなりはっきりと見ることができ思いますが、Mavenの成果物からインストルクラス。このため、現在のモジュールのクラスのカバレッジしか表示されません。
したがって、現在のモジュールが依存する各モジュールの "target/generated-classes/jacoco"フォルダを確実に使用するクラスパスの前に追加するように指定する必要があるようです。私はそれをする方法を見ていない。
また、 "instrument"ゴールには "includes"設定要素があることがわかります。現在のモジュールが依存する各モジュールのすべての "target/classes"ディレクトリへのパスを指定する必要がありますか?
私はこれをいくつかの中期戦略で扱います:1.オフライン計測でPowerMockを使用している間、モジュール "foo"のユニットテストを受け入れると、そのモジュールのカバレッジのみが表示されます。2.書き込みユニット3. PowerMockの使用を強制してFactoryを使用する1つのメカニズムを置き換え、Mockitoとオンライン計測を使用するようにこれらのテストを変更します。 –