0

工具版本

毕业 5.6.4

爪哇 1.8

jacoco 工具版本 0.8.2

项目结构

├── build.gradle
├── app
│   ├── build.gradle (1)
│   └── src
├── submodule_1
│   ├── build.gradle (2)
│   └── src
├── submodule_2
│   ├── build.gradle (3)
│   └── src
├── gradle
│   ├── jacoco.gradle
│   └── other_scripts.gradle

描述

(1) 进口jacoco.gradle

(1)、(2) 和 (3) 具有以下配置:

    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

问题

我想得到一个全面的覆盖,我可以简单地在属性中包含子模块的文件classDirectoriessourceDirectories或者我将它们包含在 shell 中additionalClassDirs吗?我真的不明白他们的区别。

这里是gradle/jacoco.gradleapp/build.gradle.

apply plugin: 'jacoco'

def coverageSourceDirs = [
        "${rootDir.absolutePath}/app/src",
        "${rootDir.absolutePath}/submodule_1/src",
        "${rootDir.absolutePath}/submodule_2/src",
]

def coverageClassDirs = [
        fileTree(dir: "${rootDir.absolutePath}/app/build/intermediates/javac/SNMAPP__10009Debug/compileSNMAPP__10009DebugJavaWithJavac/classes", excludes: androidExclusion),
        fileTree(dir: "${rootDir.absolutePath}/submodule_1/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes", excludes: androidExclusion),
        fileTree(dir: "${rootDir.absolutePath}/submodule_2/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes", excludes: androidExclusion),
]

task jacocoTestReport_test(type: JacocoReport) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports runing tests."

    reports {
        xml.enabled = true
        html.enabled = true
        html.destination file("${rootDir.absolutePath}/app/build/reports/jacoco")
    }
    sourceDirectories = files(coverageSourceDirs)
    classDirectories = files(coverageClassDirs)
    executionData = files("${rootDir.absolutePath}/app/build/outputs/code_coverage/SNMAPP__10009DebugAndroidTest/connected/coverage.exec")
}
4

1 回答 1

1

是的,您只需要在classDirectories和中包含子模块的文件sourceDirectories。顺便说一句,您应该将子模块的所有测试结果包含在executionData

def appAndroidTests = fileTree(dir: "${buildDir}/outputs/code_coverage/{your flavor}AndroidTest/connected", includes: ["*.ec"])

executionData = files(
  "${buildDir}/jacoco/test{your flavor}UnitTest.exec",
  "../submodule_1/build/jacoco/test{your flavor}UnitTest.exec",
  "../submodule_2/build/jacoco/test{your flavor}UnitTest.exec",
  appAndroidTests
)
于 2021-07-08T03:57:40.540 回答