MS 测试不会提高 sonarqube 中的代码覆盖率

Posted

技术标签:

【中文标题】MS 测试不会提高 sonarqube 中的代码覆盖率【英文标题】:MS test does not improve code coverage in sonarqube 【发布时间】:2021-11-21 09:08:10 【问题描述】:

我在 Visual Studio 2015 中使用 .Net MVC 和 Web API 项目。

该项目配置了 SonarQube 版本 8.7。

目前代码覆盖率百分比为 0%。

最近我在我的解决方案中添加了一个单元测试项目,并为我的 Web API 控制器添加了大约 25 多种测试方法。

所有的测试方法都通过了。我正在使用 MS Test 进行单元测试。

在执行 SonarQube 脚本时,尽管添加了单元测试用例,但我的代码覆盖率没有任何改善。

请指导我哪些问题导致 SonarQube 中的代码覆盖率为 0%

提前谢谢你。

【问题讨论】:

【参考方案1】:

编辑:在 OP 为更清晰添加注释后,以下块对于理解问题是必要的:

来自下面链接的文档。

We support:

Import of coverage reports from VSTest, dotCover, OpenCover, Coverlet and NCover 3.
Import of unit test results from VSTest, NUnit and xUnit.

要包含测试结果和测试覆盖率,您需要创建将由 SonarQube 读取的 XML 报告。 Official documentation can be found here.

因为MS forum 这么说:

Visual Studio includes the VSTest and MSTest command-line tools for testing purposes.

We can use both VSTEST and MSTEST to run automated unit and coded UI tests from a command line.

我的建议是使用 VStest,因为不支持 MStest。另外,也有一些需要注意的案例,请查看文档。

运行单元测试以收集代码覆盖率 "%VSINSTALLDIR%\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" /EnableCodeCoverage "UnitTestProject1\bin\Debug\UnitTestProject1.dll"

将代码覆盖率报告从二进制转换为 XML

"%VSINSTALLDIR%\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output: "%CD%\VisualStudio.coveragexml" "%CD%\VisualStudio.coverage"

如果有人使用 NUnit,以下是包含它的步骤: 运行单元测试并将结果保存在文件“NUnitResults.xml”中

packages\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe --result=NUnitResults.xml "NUnitTestProject1\bin\Debug\NUnitTestProject1.dll"

导入单元测试结果

要导入测试执行报告,在开始步骤中,您需要传递一个指向将要生成的文件的参数:

sonar.cs.nunit.reportsPaths 用于 NUnit

完整的命令类似于:

dotnet sonarscanner begin /k:PROJECT_NAME /d:sonar.login=LOGIN_TOKEN /d:sonar.host.url=URL /d:sonar.cs.nunit.reportsPath=PATH_TO_NUnitResults.xml 

【讨论】:

我已经提到我正在使用 MS Test 进行单元测试。我猜你的答案是针对 NUnit。 嗨@Jimesh,我已经更新了答案,你能检查一下吗?【参考方案2】:

我的第一个猜测是您正在运行 VS 社区版或专业版。让 Visual Studio 生成覆盖文件 you need Enterprise 或 3d 方覆盖插件。

要求

代码覆盖率功能仅在 Visual Studio 企业版中可用。

在这种情况下,您需要配置 dotCover 或任何其他提到的覆盖工具或升级到 VS Enterprise。

【讨论】:

我使用的是 Visual Studio 2019 企业版,仍然没有更新 Sonar qube 中的代码覆盖率。

以上是关于MS 测试不会提高 sonarqube 中的代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube 覆盖多模块项目

Jacoco和Tycho surefire的Eclipse RCP插件代码介绍

SonarQube 中的测试自动化执行报告

Jacoco和SonarQube的测试覆盖率不一样

SonarQube 不会向 Discord webhook 发送通知

Sonarqube gradle 插件 - 排除测试源会破坏报告中的单元测试计数