【发布时间】: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 code coverage in Hudson 的可能重复项
标签: java unit-testing maven code-coverage sonarqube