2016-09-12 6 views
0

GroovyプロジェクトでJaCoCoを使用すると、カバレッジレポートに多くの暗黙的に作成されたクロージャークラスが生成されます。それらにリンクされたソースは、囲むクラスです。包囲クラスのカバレッジレポートには、カバレッジカバレッジも含まれているため、カバレッジレポートには何も追加されません。さらに悪いことに、クロージングでカバーするステートメントは全体の統計で2回カウントされるため、カバレッジレポートが改ざんされます。JaCoCoからの暗黙的なGroovyクロージャークラスをGradleで除外する方法

したがって、生成されたJaCoCoカバレッジレポートからこれらのクロージャをどのように除外しますか?

答えて

1

あなたはカバレッジがもはや記録されていないとスニペットでは、これは、囲むクラスに記録するステートメントを防ぐことはできません

test { 
    jacoco.excludes = ['**/*$*_closure*'] 
} 

、次のスニペットを記録JaCoCoからの暗黙的な閉鎖のクラスを除外することができますが、すべてのクロージャはレポートに0%のカバレッジで表示され、全体カバレッジ統計も減少します。

次のスニペットを追加すると、JaCoCoレポートからクロージャークラスが削除されるため、より意味のある全体統計が得られます。上記のスニペットは本当に必要なわけではありませんが、カバレッジを記録したりレポートに変換したりする必要がないため、パフォーマンスの向上はわずかです。両方のスニペットを使用することをおすすめします。

jacocoTestReport { 
    doFirst { 
     classDirectories = classDirectories.collect { fileTree(it) { exclude '**/*$*_closure*' } }.sum() 
    } 
} 

あなたがこの方法を変更したい複数のTestJacocoReportタスクを持っている場合、あなたはもちろん、一般的に

tasks.withType(Test) { 
    jacoco.excludes = ['**/*$*_closure*'] 
} 

tasks.withType(JacocoReport) { 
    doFirst { 
     classDirectories = classDirectories.collect { fileTree(it) { exclude '**/*$*_closure*' } }.sum() 
    } 
} 
ようにそれを行うことができます
関連する問題