结合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
}
}