2017-05-03 121 views
2

我已经在命令行中使用摇篮运行我的代码覆盖率报告在我的Android项目,使用以下命令:如何在Android Studio 2.3中配置代码覆盖率报告?

./gradlew createDebugCoverageReport 

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

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

谢谢!

+0

您是否使用'createDebugCoverageReport'只是单元测试或Android测试+单元测试? –

+0

我想结合两者,但目前只是android测试。 – Thorinside

回答

3

你要做到以下几点:

  1. 运行单元测试:gradlew testDebug
  2. 运行Android测试:gradlew connectedDebugAndroidTest
  3. 为Android测试创建的代码覆盖率:gradlew createDebugCoverageReport
  4. 完成这些步骤后,你可以使用单个任务将它们最终结合起来

应用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

+0

不错。我会试一试。 – Thorinside

+0

@Thorinside对此有何更新? –

+1

绝对没有进入,并测试了这一点呢。但我很快就需要。感谢@ jared-burrows提醒。 – Thorinside