【问题标题】:Combine jacoco coverage from androidTest and test结合来自 androidTest 和测试的 jacoco 覆盖率
【发布时间】:2015-05-11 01:39:33
【问题描述】:

自从'com.android.tools.build:gradle:1.1.0' 发布以来,我将大部分java 测试代码从androidTest 移动到test 文件夹,因为JVM 测试要快得多。但我无法移动所有测试。由于一些ContentProvider 的东西,我真的需要设备测试。

在开始迁移之前,我的代码覆盖率已达到 100%。当我当前运行 jacoco 代码覆盖率时,androidTest 文件夹的覆盖率为 40%,test 文件夹的覆盖率为 71%。我的代码已经过 100% 测试,但我没有报告证明这一点。

有没有办法合并两个报告?我找到了JacocoMerge,但无法使用。

这是androidTest 文件夹的输出:build/outputs/reports/coverage/debug/index.html

这里是test 文件夹的输出 build/reports/jacoco/generateJacocoTestReports/html/index.html 使用此 gradle 任务生成:

def coverageSourceDirs = [
        '../library/src/main/java'
]

task generateJacocoTestReports(type: JacocoReport, dependsOn: "test") {
    group = "Reporting"
    description = 'Generate Jacoco Robolectric unit test coverage reports'

    classDirectories = fileTree(
            dir: '../library/build/intermediates/classes/debug',
            excludes: ['**//*R.class',
                       '**//*R$*.class',
                       '***/*//*$ViewInjector*.*',
                       '**//*BuildConfig.*',
                       '**//*Manifest*.*']
            )
    sourceDirectories = files(coverageSourceDirs)
    additionalSourceDirs = files(coverageSourceDirs)
    executionData = files('../library/build/jacoco/testDebug.exec')
}

【问题讨论】:

  • 如果您找到了解决方案,我将不胜感激您提供的任何提示。谢谢。

标签: android unit-testing gradle code-coverage jacoco


【解决方案1】:

JacocoMerge任务可用于合并2个或更多jacoco执行数据。

可以将以下任务添加到根 gradle 文件中,成功执行此任务后,可以在根构建目录下找到合并的执行数据。 (build/jacoco/mergeJacocoReport.exec)

evaluationDependsOnChildren()
//Missing this might be a problem in fetching JacocoReport tasks from sub-modules.

 task mergeJacocoReport(type: org.gradle.testing.jacoco.tasks.JacocoMerge) {
    group "Jacoco Report"
    description "Merge Jacoco Code Coverage Report"

    def executionFiles = fileTree("$rootProject.rootDir", {
        includes = ['**/*.exec']
    })

    setExecutionData(executionFiles)

}

subprojects.each { $project ->
    def tasks = $project.tasks.withType(JacocoReport)

    if (tasks != null) {
        mergeJacocoReport.dependsOn << tasks
    }
}

【讨论】:

    【解决方案2】:

    还有 gradle 插件 https://github.com/palantir/gradle-jacoco-coverage 根据文档也可以完成这项工作。

    我还没有尝试过用于具有两个不同测试部分的一个子模块,但它可以很好地将测试部分合并到两个子模块。

    详情请见Gradle jacoco coverage report with more than one submodule(s)?

    【讨论】:

      【解决方案3】:

      不确定你是否还需要这个,但我最近发布了 Gradle 插件,它可能会对你有所帮助:https://github.com/paveldudka/JacocoEverywhere

      【讨论】:

      • 非常有用的插件
      【解决方案4】:

      如果您将 Jenkins 与 JaCoCo 插件一起使用,您只需在“执行文件的路径”中配置所有 jacoco.exec 和 emma.ec 文件即可报告综合覆盖率。

      connectedAndroidTest 默认会在“输出”中的某处生成 emma.ec 文件。

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        相关资源
        最近更新 更多