声纳测试覆盖范围不包括间接 类

Sonar test coverage does not include indirect classes

如果我有以下 类(A 和 B),它们都在一个单独的模块中,并且我为 A.doSomething() 创建了一个测试,Sonar 会抱怨 0% B.doSomething() 的报道,尽管它正在 TestA 中进行间接测试。 使用 Eclipse 的 Ecclema 覆盖插件,我可以 see 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