Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结合androidTest和test的jacoco覆盖率_Android_Unit Testing_Gradle_Code Coverage_Jacoco - Fatal编程技术网

结合androidTest和test的jacoco覆盖率

结合androidTest和test的jacoco覆盖率,android,unit-testing,gradle,code-coverage,jacoco,Android,Unit Testing,Gradle,Code Coverage,Jacoco,自从发布'com.android.tools.build:gradle:1.1.0'以来,我将我的大部分java测试代码从androidTest移动到test文件夹,因为JVM测试要快得多。但我无法移动所有测试。我真的需要设备测试,因为一些ContentProvider的东西 在开始迁移之前,我已经有了100%的代码覆盖率。当我当前运行jacoco代码覆盖率时,androidTest文件夹的覆盖率为40%,而test文件夹的覆盖率为71%。我的代码是100%测试,但我没有报告证明这一点 有没有一

自从发布
'com.android.tools.build:gradle:1.1.0'
以来,我将我的大部分java测试代码从
androidTest
移动到
test
文件夹,因为JVM测试要快得多。但我无法移动所有测试。我真的需要设备测试,因为一些
ContentProvider
的东西

在开始迁移之前,我已经有了100%的代码覆盖率。当我当前运行jacoco代码覆盖率时,
androidTest
文件夹的覆盖率为40%,而
test
文件夹的覆盖率为71%。我的代码是100%测试,但我没有报告证明这一点

有没有一种方法可以合并这两个报告?我找到了,但无法使用

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

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

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

如果您将Jenkins与JaCoCo插件一起使用,您可以在“exec文件路径”中配置所有JaCoCo.exec和emma.ec文件,以报告组合覆盖率


默认情况下,connectedAndroidTest将在“outputs”中的某个位置生成emma.ec文件。

不确定您是否仍然需要此文件,但我最近发布了Gradle插件,它可能会帮助您做到这一点:

还有一个Gradle插件,根据文档也可以完成此工作

我没有试过用它来处理一个子模块和两个不同的测试部分,但是它可以很好地将一个子模块的测试部分合并到两个子模块中


有关详细信息,请参见

JacocoMerge任务可用于合并2个或多个jacoco执行数据

可以将下面的任务添加到根gradle文件中,成功执行此任务后,可以在根生成目录下找到合并的执行数据。(build/jacoco/mergeJacocoReport.exec

evaluationDependsOnChildren()
//缺少这一点可能是从子模块获取JacoReport任务时出现问题。
任务合并jacocoreport(类型:org.gradle.testing.jacoco.tasks.jacocorege){
“Jacoco报告”组
说明“合并Jacoco代码覆盖率报告”
def executionFiles=fileTree(“$rootProject.rootDir”{
includes=['**.exec']
})
setExecutionData(executionFiles)
}
subprojects.each{$project->
def tasks=$project.tasks.withType(JacocoReport)
如果(任务!=null){

mergeJacocoReport.dependsOn如果您找到了解决方案,我将非常感谢您提供的任何提示。谢谢。非常有用的插件
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
    }
}