SonarQube - 是否有关于如何解决覆盖问题的基本 example/explanation?

SonarQube - Is there basic example/explanation of how coverage issues can be resolved?

我对使用 SonarQube/Cloud 还很陌生(所以请保持温和!),我正在努力研究如何改进我的代码所具有的“新代码的 0% 覆盖率”。

这是一个例子:

我添加了代码:

    validation_errors = []

    for field in required:
        if field not in request.POST:
            validation_errors.append("field '{0}' missing".format(field))

    if len(validation_errors) > 0:
        return JsonResponse({'errors': validation_errors}, status=400 )

我对此进行了 (Django) 测试:

def test_required_params(self):
        # no username
        response = self.client.post(self.url, { 'password': 'secret', 'media_file': self.video_file })
        self.assertRaises(forms.ValidationError)
        self.assertEqual(response.status_code, 400)

但是当我 运行 声纳扫描仪时,在在线报告中,我收到消息说这些线没有被覆盖(参见:https://sonarcloud.io/component_measures?id=django_oppia&metric=new_coverage&selected=django_oppia%3Aapi%2Fmedia.py

我确定我必须对覆盖率指标的实际含义有一些非常基本的 mis/non-understanding 了解。

如果有人能向我解释我需要在我的代码中 add/update 什么(只是上面的特定示例),我将不胜感激,因此 SonarCloud 分析不会继续将其标记为未涵盖.

感谢您的帮助 - 如果您需要有关 code/platform/versions 等的任何额外信息,请告诉我。

编辑 我正在 运行ning:

的声纳扫描仪命令
sonar-scanner \
  -Dsonar.projectKey=django_oppia \
  -Dsonar.organization=alexlittle-github \
  -Dsonar.sources=. \
  -Dsonar.host.url=https://sonarcloud.io \
  -Dsonar.login=xxxxxxxxxx \
  -Dsonar.exclusions=docs/_build/**/*

我 运行 这是我源代码的根目录,我 specified/edited 在 sonar/conf/sonar-scanner.properties 文件中没有任何内容(它只是默认安装的版本)

感谢上面@metalisticpain 的评论 post,我现在可以正常工作了。 这个问题是因为我错过了创建覆盖率报告。

对于遇到同样问题的其他人,以下是我的解决方法...

首先我运行覆盖工具(从我的项目目录的根目录):

coverage erase
coverage run --branch --source=oppia
coverage xml -i

然后将声纳扫描仪指向这个 coverage.xml 文件:

sonar-scanner \
  -Dsonar.projectKey=django_oppia \
  -Dsonar.organization=alexlittle-github \
  -Dsonar.sources=. \
  -Dsonar.host.url=https://sonarcloud.io \
  -Dsonar.login=xxxxxxxxxx \
  -Dsonar.exclusions=docs/_build/**/*,tests/**/*,oppiamobile/settings_secret.py \
  -Dsonar.python.coverage.reportPath=./coverage.xml

我添加了一些额外的排除项,但真正有所不同的是将 reportPaths 添加到 coverage.xml