JaCoCo Gradle Kotlin DSL 从违规规则中排除文件
JaCoCo Gradle Kotlin DSL exclude file from violation rules
我正在尝试将我的项目设置为 运行 JaCoCo,如果测试覆盖率低于 80%,则构建失败。需要注意的是,我想排除一个特定的文件,但我似乎无法做到这一点。我已经在网上搜索并阅读了大量的 Stack Overflow 答案、博客文章和插件文档,但我无法使任何工作正常进行。它始终仍然包含我要排除的文件。
我开始于:
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
这显然将包括所有内容,而且确实如此。我根据所读内容尝试了以下变体,但其中 none 有效:
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
})
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks.jacocoTestCoverageVerification {
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
}
)
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks {
getByName<JacocoReport>("jacocoTestReport") {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.map {
fileTree(it) {
exclude("path.to.my.class.HelloWorld")
}
}))
}
}
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks.withType<JacocoReport> {
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
}
)
}
所有这些的输出完全相同:
Execution failed for task ':jacocoTestCoverageVerification'.
> Rule violated for bundle OneUIBackend: instructions covered ratio is 0.6, but expected minimum is 0.8
有没有人知道如何正确执行此操作?
原来我是将排除的文件声明为类路径而不是文件路径。最终的解决方案是:
tasks.jacocoTestReport {
dependsOn(tasks.test)
finalizedBy(tasks.jacocoTestCoverageVerification)
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path/to/my/file/HelloWorld*")
}
)
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
exclude("path/to/my/file/HelloWorld*")
})
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
可以排除的更清楚一点:
tasks.jacocoTestReport {
classDirectories.setFrom(
files(classDirectories.files.map {
fileTree(it) {
exclude(
"com/example/integration/**",
"com/example/application/*Ext*"
)
}
})
)
}
我正在尝试将我的项目设置为 运行 JaCoCo,如果测试覆盖率低于 80%,则构建失败。需要注意的是,我想排除一个特定的文件,但我似乎无法做到这一点。我已经在网上搜索并阅读了大量的 Stack Overflow 答案、博客文章和插件文档,但我无法使任何工作正常进行。它始终仍然包含我要排除的文件。
我开始于:
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
这显然将包括所有内容,而且确实如此。我根据所读内容尝试了以下变体,但其中 none 有效:
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
})
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks.jacocoTestCoverageVerification {
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
}
)
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks {
getByName<JacocoReport>("jacocoTestReport") {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.map {
fileTree(it) {
exclude("path.to.my.class.HelloWorld")
}
}))
}
}
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
tasks.withType<JacocoReport> {
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
}
)
}
所有这些的输出完全相同:
Execution failed for task ':jacocoTestCoverageVerification'.
> Rule violated for bundle OneUIBackend: instructions covered ratio is 0.6, but expected minimum is 0.8
有没有人知道如何正确执行此操作?
原来我是将排除的文件声明为类路径而不是文件路径。最终的解决方案是:
tasks.jacocoTestReport {
dependsOn(tasks.test)
finalizedBy(tasks.jacocoTestCoverageVerification)
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path/to/my/file/HelloWorld*")
}
)
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
exclude("path/to/my/file/HelloWorld*")
})
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
可以排除的更清楚一点:
tasks.jacocoTestReport {
classDirectories.setFrom(
files(classDirectories.files.map {
fileTree(it) {
exclude(
"com/example/integration/**",
"com/example/application/*Ext*"
)
}
})
)
}