自'com.android.tools.build:gradle:1.1.0'
发布以来,我将大部分java测试代码从androidTest
移动到test
文件夹,因为JVM测试速度要快得多。但我不能移动所有测试。我真的需要设备测试,因为有些ContentProvider
的东西。
在开始迁移之前,我已经有100%的代码覆盖率。当我正在运行jacoco代码覆盖时,androidTest
文件夹获得40%,test
文件夹获得71%。我的代码经过100%测试,但我没有证据证明这一点。
有没有办法合并两份报告?我发现JacocoMerge但无法让它发挥作用。
以下是androidTest
文件夹的输出:build/outputs/reports/coverage/debug/index.html
这里是test
文件夹的输出
build/reports/jacoco/generateJacocoTestReports/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')
}
答案 0 :(得分:6)
不确定您是否仍然需要此功能,但我最近发布了Gradle插件,可能会对您有所帮助:https://github.com/paveldudka/JacocoEverywhere
答案 1 :(得分:1)
还有gradle插件https://github.com/palantir/gradle-jacoco-coverage,根据文档也可以完成这项工作。
我没有尝试过一个带有两个不同测试部件的子模块,但它适用于将两个子模块的测试部件合并。
有关详细信息,请参阅Gradle jacoco coverage report with more than one submodule(s)?
答案 2 :(得分:0)
如果您将Jenkins与JaCoCo插件一起使用,您只需在“执行文件路径”中配置所有jacoco.exec和emma.ec文件,即可报告组合覆盖率。
默认情况下,connectedAndroidTest会在“输出”中的某处产生emma.ec文件。
答案 3 :(得分:0)
JacocoMerge 任务可用于合并两个或更多jacoco执行数据。
可以将以下任务添加到根gradle文件中,并且在成功执行此任务时,可以在根构建目录下找到合并的执行数据。 (的建立/ 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
}
}