如果我有以下类(A 和 B),它们各自位于单独的模块中,并且我为 A.doSomething()
创建测试,Sonar 会提示 0% 覆盖 B.doSomething()
,尽管它是在 TestA
中间接测试的。
使用 Eclipse 的 Ecclema 覆盖插件,我可以看到 B.doSomething()
被视为已覆盖。
Sonar 这样做有什么原因吗?有没有办法改变 Sonar 代码测试覆盖率的行为以包含间接测试的类?
class A {
boolean doSomething() {
return new B().doSomething();
}
}
class B {
boolean doSomething() {
return true;
}
}
最佳答案
你可以轻松实现你想要的。这是您如何配置 JaCoCo 的问题,因此与 SonarQube 关系不大。 例如,在 SonarQube Eclipse 项目中,我们需要它,因为单元测试位于单独的模块中。
因此,我们将 JaCoCo 配置为对所有模块使用相同的转储文件(默认情况下,JaCoCo Maven 插件将为每个模块使用一个单独的转储文件): https://github.com/SonarSource/sonar-eclipse/blob/master/pom.xml#L373
然后我们配置 SonarQube JaCoCo 插件以使用相同的报告: https://github.com/SonarSource/sonar-eclipse/blob/master/pom.xml#L357
关于java - Sonar 测试覆盖范围不包括间接类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579555/