想象一个多模块的 Maven 项目,例如下面的项目:
parent
+- core
+- main
main
依赖于 core
模块。
我现在写一个类CoreClass
在 core
,有两种方法:method1()
和 method2()
.
在 core
测试,我写了一个只测试CoreClass.method1()
的测试类.
如果我运行覆盖率工具(在我的例子中是 Cobertura,使用 mvn sonar:sonar
),我会发现我在 CoreClass
上获得了 50% 的测试覆盖率(如果我们想象这两种方法具有相同的长度)。
到目前为止,一切正常。
现在,在 main
项目,我编写了一个测试类来测试 CoreClass.method2()
.所以通常,我希望在CoreClass
上有100% 的线路覆盖当我对整个项目进行分析时。
但是,我仍然得到 50%。
我理解这是一种综合行为。事实上,Cobertura 将仪器CoreClass
仅在 core
上执行测试期间用于覆盖率分析模块,而不是 main
.
这解释了为什么我仍然有 50% 的代码覆盖率。
但是,我的问题是想知道是否有办法获得 CoreClass
的真实 代码覆盖率当我在所有模块上运行测试时。
谢谢!
ps:我知道在一个完美的世界里,这不是main
的关注点。模块测试 core
类。但正如您所知,我们并不是一个完美的世界 :o)
技术信息:Java 1.6、JUnit 4.8.1、Maven 2.0.9(即将升级到 2.2.1,但我认为这并不重要)、Sonar 2.8
最佳答案
使用 jacoco 和 sonar,所有模块都有一个 jacoco.exec 文件结果。 Sonar 将使用此文件并报告每个模块的正确覆盖率。 我已经成功地将它用于 Sonar 的多模块项目
关于java - 如何获得 Maven 多模块项目的完整代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378187/