Jacoco 参数化违反规则值

Jacoco parameterize violation rule value

我的 build.gradle 文件中有以下内容。如果覆盖率低于某个值,我试图使构建失败。

project.task(type: JacocoCoverageVerification, "jacocoTestCoverageVerification", overwrite: true) {

    executionData(junitPlatformTestTask)
    sourceSets(sourceSets.main)
    sourceDirectories = files(sourceSets.main.allSource.srcDirs)
    classDirectories = files(sourceSets.main.output)
    onlyIf = {
        true
    }
    violationRules {
        rule {
            limit {
                counter = 'INSTRUCTION'
                value = 'COVEREDRATIO'
                minimum = 0.001
            }
        }
    }
}

如何在此处参数化"minimum"的值,以便在构建项目时通过 Jenkins 或 Team city 传递它。任何帮助将不胜感激。

在Jenkins中使用参数化构建,添加参数"minimumValue"。然后你可以在 build.gradle:

中使用它
task jacocoJupTestReport(type: JacocoReport) {
    executionData(test)
    sourceSets(sourceSets.main)
    sourceDirectories = files(sourceSets.main.allSource.srcDirs)
    classDirectories = files(sourceSets.main.output)

    reports {
        xml.enabled true
        xml.destination file("${buildDir}/reports/jacoco/report.xml")
        html.enabled false
        csv.enabled false
    }

    jacocoTestCoverageVerification {
        violationRules {
            rule {
                limit {
                    counter = 'INSTRUCTION'
                    value = 'COVEREDRATIO'
                    minimum = project.properties["minimumValue"]
                }
            }
        }
    }
}

可以使用System环境从Jenkins传参

System.getEnv("<JENKINS_PARAM_NAME>") as String ?: "<default value>"

将类型设置为 String 以安全地假设 Jenkins 中可接受的参数类型。然后在 gradle:

中转换回特定类型

例如:

def coverageRatio = System.getEnv("COVERAGE_RATIO") as String ?: "1.0" //"default value is 100% coverage"
def fileFilter = ['**/path/to/your/classes/you/like/to/exclude','**/some/class']



violationRules {
    ...
    rule {
        element = 'BUNDLE'
        limit {
            counter = 'INSTRUCTION'
            value = 'COVEREDRATIO'
            minimum = coverageRatio.toBigDecimal()
        }
        excludes = fileFilter
    }

}