大家好,又见面了,我是你们的朋友全栈君。
关于android中的代码覆盖率,可以参考我前几篇文章:
Android手工测试代码覆盖率增强版 Android手工测试的代码覆盖率 Android UI自动化测试的代码覆盖率
官方生成代码覆盖率报告的流程
gradle为android提供的插件生成代码覆盖率的报告流程为首先在应用目录的生成coverage.ec文件(比如我们的应用package为com.wuba.wuxian.android_0504,那么这个coverage.ec在测试完成时会在android系统的/data/data/com.wuba.wuxian.android_0504/目录下生成),然后pull到本地的项目根目录的build/outputs/code-coverage/connected
目录下,这个时候执行createDebugCoverageReport
根据这个coverage.ec和build/intermediates/classes/debug
目录下的class文件生成报告,报告存放在项目根目录下/build/outputs/reports/coverage/debug
下。这个是官方的流程。
根据coverage.ec生成报告
我们在前一篇文章中得到了手工测试的代码覆盖率文件coverage.ec,现在我们根据这个文件如何生成代码覆盖率的报告呢?
很简单,首先我们将这个文件存放到build/outputs/code-coverage/connected下,然后在build.gradle加入如下语句:
代码语言:javascript复制apply plugin: 'jacoco'
def coverageSourceDirs = [
'../app/src/main/java'
]
task jacocoTestReport(type: JacocoReport) {
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/outputs/code-coverage/connected/coverage.ec")
doFirst {
new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
然后我们执行gradle jacocoTestReport
生成报告,报告的存放目录为项目根目录下的 build/reports/jacoco/jacocoTestReport
目录下:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162113.html原文链接:https://javaforall.cn