我对使用 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)
但是当我运行 Sonar 扫描仪时,在在线报告中,我收到消息说这些行没有被覆盖(参见:https://sonarcloud.io/component_measures?id=django_oppia&metric=new_coverage&selected=django_oppia%3Aapi%2Fmedia.py)
我确定我一定对覆盖率指标的实际含义有一些非常基本的误解/不理解。
如果有人能向我解释我需要在我的代码中添加/更新什么(只是上面的特定示例),我将不胜感激,因此 SonarCloud 分析不会继续将其标记为未涵盖。
感谢您的帮助 - 如果您需要有关代码/平台/版本等的任何额外信息,请告诉我。
编辑 我正在运行的 Sonar 扫描仪命令:
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/**/*
我从源代码的根目录运行它,我没有在 sonar/conf/sonar-scanner.properties 文件中指定/编辑任何内容(它只是默认安装的版本)
最佳答案
感谢@metalisticpain 在上面发表的评论,我现在已经开始工作了。 问题是由于我错过了创建覆盖率报告。
对于遇到同样问题的其他人,以下是我的解决方法...
首先我运行了覆盖工具(从我的项目目录的根目录):
coverage erase
coverage run --branch --source=oppia
coverage xml -i
然后将 Sonar 扫描仪指向这个 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
关于python - SonarQube - 是否有关于如何解决覆盖问题的基本示例/解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429027/