即使我添加了测试单元,sonarqube 的覆盖率也始终为 0%

Posted

技术标签:

【中文标题】即使我添加了测试单元,sonarqube 的覆盖率也始终为 0%【英文标题】:Coverage always at 0% on sonarqube even i added test unit 【发布时间】:2021-06-30 20:38:29 【问题描述】:

我为一个课程创建了一个测试单元,它在我的本地通过了很好的测试,在 sonarqube 上它显示为 0% 的覆盖率,我找到了添加 coverlet.msbuild 的帖子建议,但仍然没有消息:

   <PackageReference Include="xunit" Version="2.4.1" />
   <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
   <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
   <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.0" />
   <PackageReference Include="coverlet.msbuild" Version="3.0.3">
     <PrivateAssets>all</PrivateAssets>
     <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> 
   </PackageReference>
 </ItemGroup>

有什么想法吗?

【问题讨论】:

使用 Coverlet.MsBuild,您需要在执行测试时添加 /p:CollectCoverage=true 或添加为项目文件中的属性 &lt;PropertyGroup&gt;&lt;CollectCoverage&gt;true&lt;/CollectCoverage&gt;&lt;/PropertyGroup&gt; 但是您还需要调整各种其他设置(例如输出格式和位置)以及一些声纳设置......所有这些都是为了让 Sonarqube 拾取并识别文件中的数据(如果您在 linux 上运行,则需要更多设置) 你是如何收集报道的? 【参考方案1】:

尝试将以下内容添加到您的 .csproj

<PropertyGroup>
  <DebugType>Full</DebugType>
</PropertyGroup>

<PackageReference Include="Microsoft.CodeCoverage" Version="16.9.4" />

【讨论】:

感谢@thepirat000 的回答,不幸的是它不起作用【参考方案2】:

你能用coverlet.collector 代替coverlet.msbuild 吗?我个人已经成功使用过几次被单收集器。

<PackageReference Include="coverlet.collector" Version="1.3.0">
     <PrivateAssets>all</PrivateAssets>
     <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

根据this GitHub issue.

收集器是相当新的(最后到达)并且是进行覆盖的最佳方式,因为它与 vstest 平台(dotnet 测试)严格集成,因此是 Microsoft 每个 .NET 核心 xunit 项目的默认选择。 因此,如果您创建 xunit 项目 Microsoft xunit 模板注入,将我们的覆盖引擎设计为运行 dotnet test --collect:"XPlat Code Coverage"

的一流覆盖工具

您可能遇到this known issue。

【讨论】:

感谢您的回答,我试过了,但仍然是相同的结果 0% 的覆盖率

以上是关于即使我添加了测试单元,sonarqube 的覆盖率也始终为 0%的主要内容,如果未能解决你的问题,请参考以下文章

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

SonarQube 覆盖多模块项目

SonarQube 没有获得单元测试覆盖率

带有 jacoco 插件的 SonarQube 覆盖百分比显示为零,但可以看到单元测试的数量

为啥?单元测试覆盖率中显示的类即使没有添加到测试目标中

具有 android 测试和测试覆盖率的 sonarqube