我有一个包含4个模块的Maven项目 - 其中3个包含代码和一些测试(测试等于和类的哈希码),而第4个模块用于测试其他3个模块.
现在我想运行cobertura代码覆盖率工具来概述哪些类经过了充分测试,哪些不是.我对该主题进行了一些调查,如果测试的某些源位于其他模块中,则cobertura似乎不知道生成正确的代码覆盖百分比和线路覆盖率.
我已经阅读了一些链接,如SeamTestCoverageWithCobertura和在多模块Maven 2中使用插件Coverage,但必须有一个开箱即用的解决方案.有人可以报告一些关于这个主题的新方向吗?还是有像cobertura这样的工具?我偶然发现了艾玛,但这个工具不提供线路覆盖......
从版本2.6开始,有一个聚合选项可以在父pom中设置为true:
org.codehaus.mojo cobertura-maven-plugin 2.6 ./target/tmpCobertura html true
我们现在没有声纳,我们无法安装它.所以我必须找到一个解决方法并得到一个.此解决方案适用mvn clean install -DrunCobertura=true
于多模块项目中的简单解决方案.您只需要将此配置文件添加到super pom.xml
项目中,定义working.dir
属性即可.
runCobertura runCobertura true html ${working.dir}/${project.version}/cobertura ${cobertura.working.dir}/complete.ser org.apache.maven.plugins maven-clean-plugin 2.4.1 false . cobertura.ser ${cobertura.working.dir} org.apache.maven.plugins maven-antrun-plugin 1.7 cobertura-Instrument process-classes run cobertura-createCombinedSerFile generate-test-sources run cobertura-copyResultSerFileAndSources test run net.sourceforge.cobertura cobertura 1.9.4.1 ant-contrib ant-contrib 20020829 net.sourceforge.cobertura cobertura 1.9.4.1 test
它有什么作用:
1. @process-classes
-Instrument模块的已编译类.
2. 使用此模块中创建的模块从以前的模块中@generate-test-sources
获取.ser
文件,以获得完整的代码覆盖率.
3. @test
创建代码覆盖率报告.应该在最后一个模块中调用,但由于最后一个模块可以更改,我总是调用它,之前的报告将被覆盖.如果您使用xml
格式的报告(对于Jenkins)它很快,所以没关系.
根据MCOBERTURA-65,maven cobertura插件仍然不知道如何将子模块的报告汇总成一个统一的.已经完成了一些工作来实现merge
maven cobertura插件的目标(参见MCOBERTURA-33),但此代码尚未包含在插件中.我自己没有测试补丁,也不能说是否值得一试.
因此,很多人确实建议使用maven 仪表板插件,但我个人远离它,因为从长远来看它不是很令人满意,我遇到了很多问题(技术问题,历史遗失) ,...).相反,我热烈推荐Sonar.看看最新版Sonar的公共实例Nemo,以获得此工具的现场演示.例如,参见Commons Digester项目和代码覆盖率的深入分析.