如何从 SonarQube 测试覆盖范围中排除 `if __name__ == '__main__':` 下的代码

How to exclude codes under `if __name__ == '__main__':` from SonarQube test coverage

我有一些要求,至少需要达到 80% 的线路覆盖率。我有一些文件,其中大部分代码都在 if __name__ == '__main__': 下,不需要测试。

我如何指示 SonarQube 从测试范围中排除那部分代码。我看到有使用 sonar.exclusionssonar.coverage.exclusions 排除文件和模块的选项。排除文件的某些部分对我有很大帮助。例如,我想从 sonarQube 中排除下面 if __name__ == '__main__': 块中的所有内容:

#Test Everything inside this method
def do_something():
  # Some code

# Do not test and include the following codes in the SonarQube coverage
if __name__ == '__main__':
  # A lot of codes for running different functions of this module

我会说首先探索您正在使用的代码覆盖工具提供的选项。

对于 Sonar,大多数语言分析器都排除了末尾带有 //NOSONAR 的代码行。这肯定适用于违反规则的情况。您可以尝试一下它是否也适用于代码覆盖率。即使它有效,您也必须将它放在 if __name__ == '__main__':.
下的每一行代码中 关于这方面的文档,你可以参考https://docs.sonarqube.org/latest/faq/#header-1

这是我能想到的最好的..:)

我找到了解决问题的方法。这就是为什么我要添加其他人需要帮助的原因。我们使用 pytestcoverage 来计算覆盖率报告。 SonarQube 刚刚阅读了该报道报告。 为了排除某些行,我们在该行之后添加了以下内联注释:

# pragma: no cover

例如print("Hello World")行将被排除在测试覆盖率报告之外,

if __name__=="__main__":
    print("Hello World") # pragma: no cover