即使我添加了测试单元,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
或添加为项目文件中的属性 <PropertyGroup><CollectCoverage>true</CollectCoverage></PropertyGroup>
但是您还需要调整各种其他设置(例如输出格式和位置)以及一些声纳设置......所有这些都是为了让 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%的主要内容,如果未能解决你的问题,请参考以下文章