代码之家  ›  专栏  ›  技术社区  ›  Ermintar

Gradle Jacoco来源包括测试

  •  2
  • Ermintar  · 技术社区  · 6 年前

    我有一个多模块项目和一些测试,涵盖了它们。

    我的gradle配置如下所示:

    subprojects { subproject ->
        jacocoTestReport {
            additionalSourceDirs = files(sourceSets.main.allSource.srcDirs)
            classDirectories =  files(sourceSets.main.output)
            sourceDirectories = files(sourceSets.main.allSource.srcDirs)
    
            reports {
                html.enabled = true
                xml.enabled = true
                csv.enabled = false
            }
        }
    
        test {
            useTestNG()
        }
    
        test.finalizedBy(project.tasks.jacocoTestReport)
    }
    

    在报告中,我希望看到基于main包的源代码(由sourceset.main提供)的代码覆盖率,但也包括测试包中的所有java类。因此覆盖率结果无效。

    如何修复配置?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ermintar    5 年前

    我所有的测试都有一个命名模式,所以我可以通过regex排除它们:

    jacocoTestReport {
        additionalSourceDirs = files(sourceSets.main.allSource.srcDirs)
        classDirectories =  files(sourceSets.main.output)
        sourceDirectories = files(sourceSets.main.allSource.srcDirs)
    
        afterEvaluate {
            classDirectories = files(classDirectories.files.collect {
                fileTree(dir: it, exclude: 'path/to/test/*Test.java')
            })
        }
    
        reports {
            html.enabled = true
            xml.enabled = true
            csv.enabled = false
        }
    }