Ada*_*ich 3 gradle jacoco gradle-plugin gradle-kotlin-dsl
我正在尝试将我的项目设置为运行 JaCoCo,如果测试覆盖率低于 80%,则构建失败。需要注意的是,我想排除一个特定的文件,但我似乎无法做到这一点。我已经在网络上搜索并阅读了大量的 Stack Overflow 答案、博客文章和插件文档,但我无法让任何东西发挥作用。它始终仍然包含我试图排除的文件。
我开始于:
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这将包括一切,而且确实如此。根据我所读到的内容,我尝试了以下变体,但没有一个起作用:
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
})
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
tasks.jacocoTestCoverageVerification {
classDirectories.setFrom(
sourceSets.main.get().output.asFileTree.matching {
exclude("path.to.my.class.HelloWorld")
}
)
violationRules {
rule {
limit {
minimum = "0.8".toBigDecimal()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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")
}
}))
}
}
}
Run Code Online (Sandbox Code Playgroud)
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")
}
)
}
Run Code Online (Sandbox Code Playgroud)
所有这些的输出是完全相同的:
Execution failed for task ':jacocoTestCoverageVerification'.
> Rule violated for bundle OneUIBackend: instructions covered ratio is 0.6, but expected minimum is 0.8
Run Code Online (Sandbox Code Playgroud)
有谁知道如何正确执行此操作?
小智 5
对已接受的解决方案的补充(这也对我有用;对于使用 kotlin gradle dsl 的 kotlin 项目;gradle 7.2;jacoco 插件 0.8.7)
如果您试图找出如何从覆盖率报告中排除类,请使用afterEvaluate {...}以下对我有用的方法:
tasks.withType<JacocoReport> {
afterEvaluate {
classDirectories.setFrom(classDirectories.files.map {
fileTree(it).matching {
exclude("com/**")
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
将afterEvaluate块放入其中tasks.jacocoTestReport {...}会导致错误:
根项目“demo”上的 Project#afterEvaluate(Action) 无法在当前上下文中执行
您可以在以下位置重用classDirectories任务:jacocoTestReportjacocoTestCoverageVerification
tasks.jacocoTestReport {
dependsOn(tasks.test)
finalizedBy(tasks.jacocoTestCoverageVerification)
classDirectories.setFrom(classDirectories.files.map {
fileTree(it).matching {
exclude("com/**")
}
})
}
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
classDirectories.setFrom(tasks.jacocoTestReport.get().classDirectories)
limit {
minimum = "0.78".toBigDecimal()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3842 次 |
| 最近记录: |