如何从 SonarQube 测试覆盖范围中排除 `if __name__ == '__main__':` 下的代码
How to exclude codes under `if __name__ == '__main__':` from SonarQube test coverage
我有一些要求,至少需要达到 80% 的线路覆盖率。我有一些文件,其中大部分代码都在 if __name__ == '__main__':
下,不需要测试。
我如何指示 SonarQube 从测试范围中排除那部分代码。我看到有使用 sonar.exclusions
和 sonar.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
这是我能想到的最好的..:)
我找到了解决问题的方法。这就是为什么我要添加其他人需要帮助的原因。我们使用 pytest
和 coverage
来计算覆盖率报告。 SonarQube 刚刚阅读了该报道报告。
为了排除某些行,我们在该行之后添加了以下内联注释:
# pragma: no cover
例如print("Hello World")
行将被排除在测试覆盖率报告之外,
if __name__=="__main__":
print("Hello World") # pragma: no cover
我有一些要求,至少需要达到 80% 的线路覆盖率。我有一些文件,其中大部分代码都在 if __name__ == '__main__':
下,不需要测试。
我如何指示 SonarQube 从测试范围中排除那部分代码。我看到有使用 sonar.exclusions
和 sonar.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
这是我能想到的最好的..:)
我找到了解决问题的方法。这就是为什么我要添加其他人需要帮助的原因。我们使用 pytest
和 coverage
来计算覆盖率报告。 SonarQube 刚刚阅读了该报道报告。
为了排除某些行,我们在该行之后添加了以下内联注释:
# pragma: no cover
例如print("Hello World")
行将被排除在测试覆盖率报告之外,
if __name__=="__main__":
print("Hello World") # pragma: no cover