如何获得Maven多模块项目的完整代码覆盖率

时间:2011-06-16 20:28:11

标签: java unit-testing maven code-coverage sonarqube

想象一下多模块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 < / p>

2 个答案:

答案 0 :(得分:1)

使用jacoco和sonar,并为所有模块提供单个jacoco.exec文件结果。 Sonar将使用此文件并报告每个模块的正确覆盖范围。 我已经使用Sonar

成功地将它用于多模块项目

答案 1 :(得分:0)

您可以在此处找到jacoco/sonar的解决方案,此处仅适用于jacoco