問題タブ [scoverage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gradle - マルチプロジェクト ビルドで複数の Gradle プロジェクトにスカバレッジ コード カバレッジを提供する
マルチプロジェクトGradleビルドでgradle-scoverageを使用しています。:projectB のテストが :projectA のコードを実行するという事実を利用したいと考えています。しかし、gradle-scoverage 7.0.0 では、:projectB のカバレッジ レポートに :projectA の関連する行のコード カバレッジが表示されず、:projectA のカバレッジ レポートはそのプロジェクトのみです。
GitHub イシュー トラッカーで提案された解決策を見つけました。
しかし、うまくいきませんでした。最初の問題は、gradle-scoverage プラグインが各 Gradle プロジェクトの build.gradle ファイルに個別に適用されるため、最上位プロジェクトの build.gradle ファイルの実行時にタスクが作成されていないことでした。
そこで、その行を projectB の build.gradle ファイルに移動して、次のように変更してみました。
しかし、依存関係は機能しませんでした。reportScoverage
タスクが目的の順序で実行された一方で、タスクreportTestScoverage
が逆の順序で実行されたためです。だから私はそれを次のように変更しました:
reportTestScoverage
しかしその後、Gradle は再び、タスクが見つからないと不平を言いました。
したがって、こちらのアドバイスに従って、次のように再構築しました。
project(':projectA').tasks.reportTestScoverage.dependsOn(':projectB:reportTestScoverage')
しかし、今では projectB のreportTestScoverage
タスクが最初に実行されますが、projectA の関連する行のコード カバレッジは表示されません。IntelliJ デバッガーで projectB の関連するテストを実行して、この行がヒットすることを確認しました。
次に、追加するのを忘れていたことに気付きました。
GitHub の問題のコメントに記載されているように、projectB の依存関係に。しかし、これを追加しても違いはありませんでした。
gradlew clean build
私は各試みの後に走りました。
IntelliJ を使用して scoverage のバイトコード拡張をデバッグすることはできませんでしたが、jdb を使用すると、projectB のテストを実行すると、関連する行がカバレッジを示さないクラスが scoverage によって計測されていないことがわかります。