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

标签 java unit-testing maven code-coverage sonarqube

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

parent
  +- core
  +- main

main依赖于 core模块。

我现在写一个类CoreClasscore ,有两种方法: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/

相关文章:

java - 如何使用java中的for循环以三角形打印出“鸡”一词?

class - 在哪里可以找到标准 Java 类的代码?

python - 在测试套件运行期间 Hook python的覆盖范围?

unit-testing - 使用 Material UI Dialog 对 React 组件进行单元测试

java - 编辑Maven编译的存储库源代码

java - 获取 kafka-producer 中主题订阅者数量的选项

java - 我得到一个 "exception in thread "main"java.lang.NoClassDefFoundError : org/openqa/selenium/WebDriver"

c# - 我如何测试 void 方法?

java - maven 。 -source 1.5 不支持 lambda 表达式

android - React Native 构建失败 Could not HEAD/android-jsc/maven-metadata.xml'