Android单元测试如何统计项目业务功能的测试覆盖率?
Android 单元测试业务功能覆盖率统计实现方案
默认的createDebugCoverageReport任务会统计项目全量代码的覆盖率,包含自动生成类、基础工具类、依赖注入等非业务代码,你可以通过调整Jacoco(Android覆盖率统计底层依赖工具)的统计规则实现业务维度的覆盖率统计:
第一步:限定覆盖率统计的业务代码范围
- 打开模块级
build.gradle(Groovy)或build.gradle.kts(Kotlin)文件,添加如下配置:
android { buildTypes { debug { // 开启覆盖率统计能力 testCoverageEnabled = true } } } tasks.withType(JacocoReport::class.java) { classDirectories.setFrom( files(classDirectories.files.map { dir -> fileTree(dir).apply { // 排除所有非业务代码 exclude( "**/R.class", "**/R$*.class", "**/BuildConfig.*", "**/databinding/**", "**/di/**", "**/utils/**", "**/base/**", "**/*Test*.*" ) // 只统计业务代码所在的目录,示例路径为com/xxx/你的项目名/business/下的所有代码 include("com/xxx/yourproject/business/**") } }) ) }
- 配置完成后执行
./gradlew createDebugCoverageReport命令,生成的报告默认路径为对应模块/build/reports/coverage/debug/index.html,打开后即可看到全量业务代码的单元测试覆盖率。
第二步:按单个业务功能统计覆盖占比(可选)
如果需要拆分统计不同业务功能的覆盖率,你可以通过以下两种方式实现:
- 直接在生成的HTML覆盖率报告中,按目录层级进入对应业务功能的代码目录,即可查看该功能的单独覆盖率,比如进入
account目录就能看到账户相关功能的覆盖率,进入order目录就能看到订单相关功能的覆盖率。 - 如果你需要自动导出各业务功能的覆盖率数据,可以在Jacoco任务中增加分组统计逻辑:
tasks.withType(JacocoReport::class.java) { doLast { val coverage = jacocoCoverageCounter // 统计账户业务覆盖率 val accountRatio = coverage.getBundle("account").classCounter.coveredRatio println("账户功能覆盖率:${String.format("%.2f", accountRatio * 100)}%") // 统计订单业务覆盖率 val orderRatio = coverage.getBundle("order").classCounter.coveredRatio println("订单功能覆盖率:${String.format("%.2f", orderRatio * 100)}%") } }
注意:多模块架构项目只需在业务模块添加上述配置即可,基础组件、公共库等非业务模块不需要配置覆盖率规则。
内容的提问来源于stack exchange,提问作者Prasa Dev
相关产品推荐
相关产品推荐

