如何在Android Studio 2.3中配置代码覆盖率报告?

4

我一直在使用Gradle命令行对我的Android项目进行代码覆盖率报告的运行,使用以下命令:

./gradlew createDebugCoverageReport

这个方法可以运行,生成的报告包含了整个项目中几乎所有的包,包括第三方库。我想配置覆盖率报告只提供关于我的代码的信息。如何在Android Studio工具链生成的内置覆盖率报告中设置代码路径、包含和排除Jacoco报告?我的构建脚本中没有包含任何Jacoco插件,我只是在debug buildType中添加了testCoverageEnabled true
谢谢!

你是在仅针对单元测试使用 createDebugCoverageReport 还是同时针对 Android 测试 + 单元测试使用? - Jared Burrows
1
我想要将两者结合起来,但目前只有 Android 测试。 - Neal Sanche
1个回答

7

以下是您想要实现的操作:

  1. 运行单元测试:gradlew testDebug
  2. 运行 Android 测试:gradlew connectedDebugAndroidTest
  3. 为 Android 测试创建代码覆盖率报告:gradlew createDebugCoverageReport
  4. 在完成上述步骤后,您可以将它们合并为一个任务

应用testCoverageEnabled

android {

    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

}

Apply includeNoLocationClasses:

android {

    testOptions {
        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
            }
        }
    }

}

现在你可以创建类似于这个的任务:
apply plugin: 'jacoco'

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

    reports {
        xml.enabled = true
        html.enabled = true
    }

    def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
    def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
    def mainSrc = "${project.projectDir}/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: "$buildDir", includes: [
            "jacoco/testDebugUnitTest.exec", 
            "outputs/code-coverage/connected/*coverage.ec"
    ])
}

然后运行它:

gradle clean jacocoTestReport

来源:https://medium.com/@rafael_toledo/setting-up-an-unified-coverage-report-in-android-with-jacoco-robolectric-and-espresso-ffe239aaf3fa

本文将介绍如何使用Jacoco、Robolectric和Espresso设置Android统一覆盖率报告。

好的,我会试一下。 - Neal Sanche
1
肯定还没有进去测试过。但我很快就需要了解。感谢提醒@jared-burrows。 - Neal Sanche
1
是的,这完美地解决了我的需求。我只需要修改任务的依赖关系,因为我只在我们拥有的其中一种风味上进行测试。但除此之外,它很好用。谢谢! - Neal Sanche
1
此配置已过时。同一作者的新版本可以在此处找到:https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f - Joneth
显示零报告...有关Kotlin的任何建议吗? - Surya Reddy
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接