想象一个多模块的 Maven 项目,比如下面这个:
parent
+- core
+- main
main
取决于core
模块。
我现在用 2 个方法编写一个CoreClass
类core
:method1()
和method2()
. 在core
测试中,我编写了一个只会测试的测试类CoreClass.method1()
。
如果我运行一个覆盖率工具(在我的情况下是 Cobertura,使用mvn sonar:sonar
),我会发现我得到了50%的测试覆盖率CoreClass
(如果我们想象这两种方法具有相同的长度)。
到现在为止,一切正常。
现在,在main
项目中,我编写了一个测试类来测试CoreClass.method2()
. 所以通常情况下,当我对整个项目进行分析时,我希望有100%的线路覆盖率。CoreClass
但是,我仍然得到我的50%。
我了解这是一种综合行为。实际上,Cobertura 将仅在模块CoreClass
上的测试执行期间进行覆盖分析,而不是在. 这就解释了为什么我仍然有50%的代码覆盖率。core
main
但是,我的问题是知道是否有办法在我对所有模块运行测试时获得真正的代码覆盖率。CoreClass
谢谢!
ps:main
我知道在一个完美的世界里,测试core
类不是模块的关注点。但正如您可能知道的那样,我们并不是一个完美的世界:o)
技术信息: Java 1.6、JUnit 4.8.1、Maven 2.0.9(很快会升级到 2.2.1,但我认为这并不重要)、Sonar 2.8