3

想象一个多模块的 Maven 项目,比如下面这个:

parent
  +- core
  +- main

main取决于core模块。

我现在用 2 个方法编写一个CoreClasscoremethod1()method2(). 在core测试中,我编写了一个只会测试的测试类CoreClass.method1()

如果我运行一个覆盖率工具(在我的情况下是 Cobertura,使用mvn sonar:sonar),我会发现我得到了50%的测试覆盖率CoreClass(如果我们想象这两种方法具有相同的长度)。

到现在为止,一切正常。

现在,在main项目中,我编写了一个测试类来测试CoreClass.method2(). 所以通常情况下,当我对整个项目进行分析时,我希望有100%的线路覆盖率。CoreClass

但是,我仍然得到我的50%

我了解这是一种综合行为。实际上,Cobertura 将仅在模块CoreClass上的测试执行期间进行覆盖分析,而不是在. 这就解释了为什么我仍然有50%的代码覆盖率。coremain

但是,我的问题是知道是否有办法在我对所有模块运行测试时获得真正的代码覆盖率。CoreClass

谢谢!

ps:main我知道在一个完美的世界里,测试core类不是模块的关注点。但正如您可能知道的那样,我们并不是一个完美的世界:o)

技术信息: Java 1.6、JUnit 4.8.1、Maven 2.0.9(很快会升级到 2.2.1,但我认为这并不重要)、Sonar 2.8

4

2 回答 2

1

使用 jacoco 和 sonar 并为所有模块生成一个 jacoco.exec 文件结果。Sonar 将使用此文件并报告每个模块的正确覆盖率。我已经成功地将它用于 Sonar 的多模块项目

于 2011-09-24T11:56:00.333 回答
0

在这里您可以找到jacoco/sonar的解决方案,而这里仅适用于jacoco

于 2017-02-02T16:28:29.927 回答