Jacoco不包括Robolectic测试报道

时间:2017-11-03 20:37:39

标签: android robolectric jacoco

在我的android项目中,jacoco不包括robolectic测试。我可以使用jacoco获得android espresso和junit测试覆盖率,没有任何问题。

我确实看到了有关此问题的其他问题,所有答案都是升级jacoco版本。我正在使用最新的jacoco版本0.7.9

这是我的项目主build.gradle

buildscript {

  dependencies {
    classpath 'org.jacoco:org.jacoco.core:0.7.9'

    classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6-rc1'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
   }
}

App模块构建gradle。

apply plugin: 'jacoco'

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

1 个答案:

答案 0 :(得分:0)

我通过在gradle中为jacoco创建单独的任务来解决这个问题。

首先,你需要添加jacoco插件。

apply plugin: "jacoco"

我没有像上面的代码片段那样添加任何依赖项。只需添加插件即可。

然后将testCoverageEnabled true param添加到buildTypes部分。

buildTypes {
    debug {
        testCoverageEnabled true
    }
}

在这个示例中,它仅用于调试,但我相信如果您将其添加到发布版本,它也应该可以正常工作。

最后添加如下的jacoco任务;

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") {

    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }
    classDirectories = fileTree(
            dir: './build/intermediates/classes/debug',
            excludes: ['**/R*.class',
                       '**/*$InjectAdapter.class',
                       '**/*$ModuleAdapter.class',
                       '**/*$ViewInjector*.class'
            ])
    sourceDirectories = files(coverageSourceDirs)
    executionData = files("$buildDir/jacoco/testDebug.exec")
    doFirst {
        new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }
    }
}

使用该任务,您应该能够创建覆盖率报告。它将在构建文件夹中导出html格式的覆盖率报告。 有关详细信息,请查看this tutorial