gpt4 book ai didi

gradle - Jacoco Gradle 在整个项目级别(不是在模块级别)的最小代码覆盖率阈值

转载 作者:行者123 更新时间:2023-12-03 03:58:37 25 4
gpt4 key购买 nike

我们的项目使用的是 Gradle 3.5,jacoco 0.8.1

它有3个模块——模块-A、模块-B和模块-C,其代码覆盖率分别为50%、6%和42%,整个项目的代码覆盖率为38%。

现在我们想以整个项目当前的代码覆盖率作为阈值,也就是说如果整个项目的代码覆盖率低于 38%,构建就会失败。

我尝试了解决方案
Minimum code coverage threshold in Jacoco Gradle

jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = 0.38
}
}
}

但是失败了,提示module-B违规,指令覆盖率是0.06,而expect是0.38,看来只适合模块级别,不适合整个项目级别。

我也尝试使用 element = 'GROUP',但似乎没有效果。
( https://www.eclemma.org/jacoco/trunk/doc/api/org/jacoco/core/analysis/ICoverageNode.ElementType.html)

任何人都知道如何为整个项目而不是模块级别设置最小代码覆盖率阈值?

谢谢,

最佳答案

我建议在你的多模块构建中有一个单独的项目(模块)来报告整个项目。您可能需要 JacocoMerge任务也。假设 a、b 和 c 是 java 项目。例如

例如:

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
}
}

关于gradle - Jacoco Gradle 在整个项目级别(不是在模块级别)的最小代码覆盖率阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51372406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com