想象一下多模块Maven项目,如下所示:
parent
+- core
+- main
main
取决于core
模块。
我现在在CoreClass
中写了一个core
课,有两种方法: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 < / p>
答案 0 :(得分:1)
使用jacoco和sonar,并为所有模块提供单个jacoco.exec文件结果。 Sonar将使用此文件并报告每个模块的正确覆盖范围。 我已经使用Sonar
成功地将它用于多模块项目答案 1 :(得分:0)
您可以在此处找到jacoco/sonar的解决方案,此处仅适用于jacoco。