如何合并Grails 2.x项目中独立测试运行的代码覆盖率报告?
针对Grails 2.x插件项目全测试流程的代码覆盖率解决方案
我之前刚好处理过Grails 2.x插件项目的全测试流程覆盖率统计需求,结合你说的插件内联测试应用的场景,给你整理几个实用的方案和具体配置步骤:
方案1:用JaCoCo收集全流程覆盖率
JaCoCo现在是代码覆盖率工具里的主流选手,对Grails 2.x的支持也很到位,完全能搞定你要的单元+集成+功能测试的覆盖率合并需求。
具体配置步骤:
给插件项目添加JaCoCo依赖
在插件的BuildConfig.groovy的dependencies块里加上:test "org.jacoco:jacoco-core:0.7.9" test "org.jacoco:jacoco-agent:0.7.9"同时在
plugins块引入Grails适配的JaCoCo插件:test ":jacoco:0.7.9"配置测试应用的覆盖率收集范围
因为测试应用是内联引入插件的,得让它的集成/功能测试也能收集插件代码的覆盖率。在测试应用的BuildConfig.groovy里启用JaCoCo,并指定要覆盖的插件源码路径:jacoco { includes = ['com/yourcompany/**/*'] // 替换成你插件实际的源码包路径 excludes = ['**/*Test*', '**/conf/**'] // 排除测试类和配置文件 }执行全流程测试并生成合并报告
- 先在插件项目目录跑单元测试:
grails test-app unit: --coverage - 切换到测试应用目录,运行集成和功能测试:
grails test-app integration: functional: --coverage - JaCoCo会自动把单元、集成、功能测试的覆盖率数据合并到一起,最终在测试应用的
target/jacoco目录下生成HTML格式的报告,打开就能看到插件源码在所有测试中的覆盖情况了。
- 先在插件项目目录跑单元测试:
方案2:用Cobertura(传统稳定方案)
如果你更习惯用传统的Cobertura,它在Grails 2.x里的支持也很成熟,步骤同样简单:
具体配置步骤:
给插件和测试应用都加Cobertura插件
在两者的BuildConfig.groovy的plugins块里都加上:test ":cobertura:1.1.1" // 这个版本适配Grails 2.x,别乱升级配置测试应用的源码指向
在测试应用的Config.groovy里指定插件的源码目录,确保能收集到插件代码的覆盖率:cobertura { coverageSourceDirs = ['../plugin/src/main/groovy', '../plugin/src/main/java'] // 替换成你插件的实际源码路径 exclude = ['**/*Test.groovy', '**/conf/**'] }执行测试生成报告
- 插件项目跑单元测试:
grails test-app unit: --cobertura - 测试应用跑集成+功能测试:
grails test-app integration: functional: --cobertura - 最终的覆盖率报告会生成在测试应用的
target/test-reports/cobertura目录里,里面包含所有测试对插件代码的覆盖数据。
- 插件项目跑单元测试:
几个关键注意点
- 路径一定要准确:不管用哪个工具,都得确保测试应用能正确指向插件的源码目录,不然会出现“收集不到插件覆盖率”的问题。
- 数据自动合并:这两个工具都支持自动合并不同测试任务的覆盖率数据,不用手动去整合,只要按顺序跑完所有测试就行。
- 版本要适配:一定要选和Grails 2.x兼容的插件版本,比如JaCoCo用0.7.x系列,Cobertura用1.1.x系列,避免版本冲突导致的各种奇怪问题。
内容的提问来源于stack exchange,提问作者Luis Muñiz
相关产品推荐
相关产品推荐

