声纳测试覆盖范围不包括间接 类
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
如果我有以下 类(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