【问题标题】:How to get the full code coverage on a Maven multi-modules project如何获得 Maven 多模块项目的完整代码覆盖率
【发布时间】:2011-09-16 17:12:42
【问题描述】:

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

parent
  +- core
  +- main

main 依赖于core 模块。

我现在在core 中编写一个类CoreClass,有两种方法:method1() 和method2()。 在core 测试中,我编写了一个只测试CoreClass.method1() 的测试类。

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

到目前为止,一切正常。

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

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

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

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

谢谢!

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 请提供有关用于实现此目的的确切 Maven 语法的任何线索?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2014-10-03
    • 2019-08-20
    • 1970-01-01
    • 2014-11-12
    • 2015-01-10
    • 1970-01-01
    • 2021-11-17
    • 2019-12-29
    相关资源
    最近更新 更多