结合androidTest和testing的jacoco覆盖

自从'com.android.tools.build:gradle:1.1.0'发布以来,我将大部分的javatesting代码从androidTest到了test文件夹,因为JVMtesting速度要快得多。 但是我不能移动所有的testing。 我真的需要设备testing,因为一些ContentProvider东西。

在开始迁移之前,我已经有了100%的代码覆盖率。 当我正在运行jacoco代码覆盖率时,我得到了androidTest文件夹的40%和test文件夹的71%。 我的代码是100%testing,但我没有证据certificate这一点。

有没有办法把这两个报告结合起来? 我发现了JacocoMerge,但无法使其工作。

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

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

 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') } 

Solutions Collecting From Web of "结合androidTest和testing的jacoco覆盖"

不知道你是否仍然需要这个,但我最近发表的Gradle插件可以帮助你: https : //github.com/paveldudka/JacocoEverywhere

也有根据文档也可以做的工作的gradle插件https://github.com/palantir/gradle-jacoco-coverage

我还没有尝试过一个具有两个不同testing部分的子模式,但是它将testing部分合并到两个子模块中效果很好。

请参阅具有多个子模块的Gradle jacoco覆盖率报告? 了解详情

如果您使用JaCoCo插件使用Jenkins,则只需configuration“exec文件path”中的所有jacoco.exec和emma.ec文件即可报告组合覆盖率。

connectedAndroidTest会默认导致emma.ec文件在“outputs”的某处。

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

以下任务可以添加到根gradle文件中,并且在成功执行此任务时,可以在根目录下find合并的执行数据。 ( 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 } }