Minimum code coverage threshold in Jacoco Gradle on the whole project level(not on the module level)
我们的项目使用的是Gradle 3.5,jacoco 0.8.1
它有3个模块-模块A,模块B和模块C,其代码覆盖率分别为50%,6%和42 %,整个项目的代码覆盖率是38%。
现在,我们要使用整个项目的当前代码覆盖率作为阈值,这意味着如果整个项目的代码覆盖率较小超过38%,构建将失败。
我在Jacoco Gradle
1 2 3 4 5 6 7 8 | jacocoTestCoverageVerification { violationRules { rule { limit { minimum = 0.38 } } } |
中尝试了"最小代码覆盖率阈值"中的解决方案,但失败了,它提示模块B违反了规则,指令覆盖率是0.06,但是期望值是0.38,似乎只适合模块级别,而不适合整个项目级别。
我也尝试使用element = \\'GROUP \\',但是似乎没有效果。( https://www.eclemma.org/jacoco/trunk/doc/api/org/jacoco/core/analysis/ICoverageNode.ElementType.html)
任何人都知道如何为整个项目,而不是模块级别?
谢谢,
是的,我找到了另一种解决方案,即在每个模块中写入限制规则,例如对于模块A,其代码覆盖率为50%,因此在模块A中的build.gradle文件中,该规则如下:
1 2 3 4 5 6 7 8 9 | // for moudle-A module jacocoTestCoverageVerification { violationRules { rule { limit { minimum = 0.5 } } } |
我建议您在多模块构建中包含一个单独的项目(模块),以报告整个项目。您可能还需要
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | def javaProjects = [':a', ':b', ':c'] javaProjects.each { project(it) { apply plugin: 'java' apply plugin: 'jacoco' } } project(':report') { FileCollection execData = files(javaProjects.collect { project(it).tasks.withType(Test).jacoco.destinationFile }) FileCollection sourceDirs = files(javaProjects.collect { project(it).sourceSets.main.java.srcDirs }) FileCollection classDirs = files(javaProjects.collect { project(it).sourceSets.main.java.output.classesDirs }) def testTasks = javaProjects.collect { project(it).tasks.withType(Test)} task jacocoMerge(type: JacocoMerge) { dependsOn testTasks executionData execData jacocoClasspath = classDirs } task coverageVerification(type: JacocoCoverageVerification) { dependsOn jacocoMerge executionData jacocoMerge.destinationFile sourceDirectories srcDirs classDirectories classDirs violationRules.rule.limit.minimum = 0.38 } task jacocoReport(type: JacocoReport) { dependsOn jacocoMerge executionData jacocoMerge.destinationFile sourceDirectories srcDirs classDirectories classDirs } } |