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

时间:2017-05-03 18:31:11

标签: android android-studio android-gradle android-studio-2.3

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

./gradlew createDebugCoverageReport

这样可以生成一个报告,其中包含整个项目中的几乎所有包,包括第三方库。我想配置覆盖率报告,以提供有关我的代码的信息。如何设置代码路径,包括和排除由Android Studio工具链生成的内置覆盖率报告中的Jacoco报告?

我的构建脚本中没有包含任何Jacoco插件,我只是在调试buildType中添加了testCoverageEnabled true

谢谢!

1 个答案:

答案 0 :(得分:4)

您想要执行以下操作:

  1. 运行单元测试:gradlew testDebug
  2. 运行android测试:gradlew connectedDebugAndroidTest
  3. 为Android测试创建代码覆盖率:gradlew createDebugCoverageReport
  4. 完成这些步骤后,您最终可以使用单个任务组合它们
  5. 申请testCoverageEnabled

    android {
    
        buildTypes {
            debug {
                testCoverageEnabled true
            }
        }
    
    }
    

    申请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