coverlet.collector 6.0.2

前缀已保留
dotnet add package coverlet.collector --version 6.0.2                
NuGet\Install-Package coverlet.collector -Version 6.0.2                
此命令旨在在Visual Studio的包管理器控制台中使用,因为它使用了NuGet模块的Install-Package版本。
<PackageReference Include="coverlet.collector" Version="6.0.2">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>                
对于支持PackageReference的项目,将此XML节点复制到项目文件中以引用包。
paket add coverlet.collector --version 6.0.2                
#r "nuget: coverlet.collector, 6.0.2"                
#r指令可用于F#交互式和Polyglot笔记本。将此内容复制到交互式工具或脚本的源代码中以引用包。
// Install coverlet.collector as a Cake Addin
#addin nuget:?package=coverlet.collector&version=6.0.2

// Install coverlet.collector as a Cake Tool
#tool nuget:?package=coverlet.collector&version=6.0.2                

Coverlet与VSTest(即Visual Studio测试平台)的集成

支持的运行时版本:

自版本6.0.0

  • .NET Core >= 6.0
  • .NET Framework >= 4.6.2

如快速入门部分所述,要使用收集器,您需要运行SDK v6.0.100(LTS)或更高版本,并且您的项目文件必须引用coverlet.collector和一个最低版本的Microsoft.NET.Test.Sdk

一个示例项目文件如下所示

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net6.0;net48</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    
    <PackageReference Include="coverlet.collector" Version="6.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  ...
  </ItemGroup>
...
</Project>

在xunit模板测试(dotnet new xunit)中默认包含对coverlet.collector包的引用,您只需像更新其他任何包引用一样更新包。

在设置正确的引用后,您可以通过默认的dotnet test CLI动词运行覆盖率

dotnet test --collect:"XPlat Code Coverage"

或者

dotnet publish
...
  ... -> C:\project\bin\Debug\netcoreapp3.0\testdll.dll
  ... -> C:\project\bin\Debug\netcoreapp3.0\publish\
...
dotnet vstest C:\project\bin\Debug\netcoreapp3.0\publish\testdll.dll --collect:"XPlat Code Coverage"

正如您在vstest动词的情况下所见,您必须先发布项目。

测试结束,您可以在默认的 VSTest 平台目录 TestResults 下找到覆盖率文件数据。

Attachments:
  C:\git\coverlet\Documentation\Examples\VSTest\HelloWorld\XUnitTestProject1\TestResults\bc5e983b-d7a8-4f17-8c0a-8a8831a4a891\coverage.cobertura.xml
Test Run Successful.
Total tests: 1
     Passed: 1
 Total time: 2,5451 Seconds

您可以使用标准的 dotnet test 开关 --results-directory 更改输出目录。

注意:设计上,VSTest 平台将在一个随机命名的文件夹(GUID 字符串)下创建您的文件,因此如果您需要将其加载到某些不支持 glob 模式或层次性搜索的图形用户界面报告系统(例如 coveralls、codecov、reportgenerator 等)中,则需要手动将结果文件移动到一个可预测的文件夹。

Coverlet 支持的 VSTest 集成选项

⚠️当前 VSTest 集成不支持 msbuild 和 .NET 工具的所有功能,例如在控制台显示结果、报告合并和阈值验证。我们正在努力填平这些差距。

PS:如果您没有其他合并报告的方法(例如,您的报告生成器不支持多覆盖率文件),您目前可以利用我们的一位贡献者 Daniel Paz(@p4p3) 报告的一个技巧 https://github.com/tonerdo/coverlet/pull/225#issuecomment-573896446

默认选项(如果没有指定 runsettings 文件)

如果没有指定 runsettings 文件而只通过收集器名称调用 coverlet,生成覆盖率输出的结果默认为 cobertura 格式。

dotnet test --collect:"XPlat Code Coverage"

Coverage 报告的输出格式也可以不通过 runsettings 文件指定,通过在参数中指定来更改。支持的格式包括 lcov、opencover、cobertura、teamcity、json(默认为 coverlet 自有格式)。

dotnet test --collect:"XPlat Code Coverage;Format=json"

甚至还可以指定多个输出格式。

dotnet test --collect:"XPlat Code Coverage;Format=json,lcov,cobertura"

高级选项(通过 runsettings 支持)

以下是一些 coverlet 支持的选项,您可以在 runsettings 中将其指定为数据收集器配置。

选项 摘要
格式 覆盖率输出格式。这些格式可以是 cobertura、json、lcov、opencover 或 teamcity,也可以是这些格式的组合。
排除 使用过滤器表达式排除代码覆盖率分析。
excludeByAttribute 排除由属性装饰的整个方法、类或程序集的代码覆盖率。
excludeByFile 从代码覆盖中忽略特定的源文件。
include 使用过滤器表达式显式设置哪些要包含在代码覆盖率分析中。
includeDirectory 显式设置哪些目录要包含在代码覆盖率分析中。
SingleHit 指定是否将代码覆盖率命中报告限制为每个位置的单一命中。
useSourceLink 指定是否使用 SourceLink URI 而不是文件系统路径。
includeTestAssembly 包括测试程序集的覆盖率。
SkipAutoProps 不跟踪也不记录自动实现属性。
DoesNotReturnAttribute 标记有这些属性的方法是已知不返回的,其后的语句将被排除在覆盖率之外。
DeterministicReport 在确定性构建的上下文中生成确定性报告。请参阅文档获取更多信息。
excludeAssembliesWithoutSources 指定是否排除没有源文件的程序集。选项可以是 MissingAll、MissingAny 或 None。默认是 MissingAll。

如何通过 runsettings 指定这些选项?

<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="XPlat code coverage">
        <Configuration>
          <Format>json,cobertura,lcov,teamcity,opencover</Format>
          <Exclude>[coverlet.*.tests?]*,[*]Coverlet.Core*</Exclude> 
          <Include>[coverlet.*]*,[*]Coverlet.Core*</Include> 
          <ExcludeByAttribute>Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute</ExcludeByAttribute>
          <ExcludeByFile>**/dir1/class1.cs,**/dir2/*.cs,**/dir3/**/*.cs,</ExcludeByFile> 
          <IncludeDirectory>../dir1/,../dir2/,</IncludeDirectory>
          <SingleHit>false</SingleHit>
          <UseSourceLink>true</UseSourceLink>
          <IncludeTestAssembly>true</IncludeTestAssembly>
          <SkipAutoProps>true</SkipAutoProps>
          <DeterministicReport>false</DeterministicReport>
          <ExcludeAssembliesWithoutSources>MissingAll,MissingAny,None</ExcludeAssembliesWithoutSources>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

过滤细节见 msbuild 指南

可以通过以下命令行选项轻松提供该 runsettings 文件:

  • dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings
  • dotnet vstest C:\project\bin\Debug\netcoreapp3.0\publish\testdll.dll --collect:"XPlat Code Coverage" --settings coverlet.runsettings

请参阅我们的 HelloWorld 示例。

通过命令行传递 runsettings 参数

您可以通过使用命令行中的 xml 平面语法来避免向 dotnet test 驱动程序传递 runsettings 文件。

例如,如果您想将 Format 元素设置为 runsettings 选项,可以使用此语法:

dotnet test --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=json,cobertura,lcov,teamcity,opencover

有关更多信息,请参阅此处:https://github.com/microsoft/vstest/blob/main/docs/RunSettingsArguments.md

工作原理

借助数据收集器实现 Coverlet 集成。当我们指定 --collect:"XPlat Code Coverage" 时,VSTest 平台会尝试从 coverlet.collector.dll 中加载 coverlet 收集器

  1. 进程外数据收集器:进程外收集器在运行测试的进程之外的进程(datacollector.exe/datacollector.dll)中运行。此数据收集器负责调用 Coverlet API 对 .dll 进行插桩,收集覆盖率结果并将覆盖率输出文件发送回测试平台。

  2. 进程内数据收集器:进程内收集器在执行测试的 testhost 进程中加载。此收集器需要删除对进程退出处理器的依赖,以刷新命中文件,避免出现这个严重已知问题

常见问题

有关已知问题的完整列表,请查看详细文档KnownIssues.md

产品 兼容和额外计算的目标框架版本。
.NET net5.0 被计算。 net5.0-windows 被计算。 net6.0 被计算。 net6.0-android 被计算。 net6.0-ios 被计算。 net6.0-maccatalyst 被计算。 net6.0-macos 被计算。 net6.0-tvos 被计算。 net6.0-windows 被计算。 net7.0 被计算。 net7.0-android 被计算。 net7.0-ios 被计算。 net7.0-maccatalyst 被计算。 net7.0-macos 被计算。 net7.0-tvos 被计算。 net7.0-windows 被计算。 net8.0 被计算。 net8.0-android 被计算。 net8.0-browser 被计算。 net8.0-ios 被计算。 net8.0-maccatalyst 被计算。 net8.0-macos 被计算。 net8.0-tvos 被计算。 net8.0-windows 被计算。
.NET Core netcoreapp2.0 计算得出  netcoreapp2.1 计算得出  netcoreapp2.2 计算得出  netcoreapp3.0 计算得出  netcoreapp3.1 计算得出 
.NET Standard netstandard2.0 兼容  netstandard2.1 计算得出 
.NET Framework net461 计算得出  net462 计算得出  net463 计算得出  net47 计算得出  net471 计算得出  net472 计算得出  net48 计算得出  net481 计算得出 
MonoAndroid monoandroid 计算得出 
MonoMac monomac 计算得出 
MonoTouch monotouch 计算得出 
Tizen tizen40 计算得出  tizen60 计算得出 
Xamarin.iOS xamarinios 计算得出 
Xamarin.Mac xamarinmac 计算得出 
Xamarin.TVOS xamarintvos 计算得出 
Xamarin.WatchOS xamarinwatchos 计算得出 
兼容目标框架
包含目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

此包没有依赖项。

NuGet 包 (38)

显示借助于 coverlet.collector 依赖的前 5 个 NuGet 包

下载
Rocket.Surgery.Extensions.Testing.Coverlet

包描述

Kasp.Test

一些快速开发后端工具。

Uno.Extensions.Reactive.Testing

扩展程序,可加速使用 Uno Platform、UWP 和 WinUI 的应用程序开发

EBK.Core.BuildingBlocks

包描述

Coffee.NetCore

包描述

GitHub 仓库 (1.5K)

显示依赖 coverlet.collector 的前 5 个最受欢迎的 GitHub 仓库

仓库 星数
microsoft/PowerToys
提升 Windows 系统生产力的实用工具
shadowsocks/shadowsocks-windows
Shadowsocks 的 C# 版本
jellyfin/jellyfin
免费软件媒体系统
NickeManarin/ScreenToGif
🎬 ScreenToGif 允许您录制屏幕的选定区域,编辑并保存为 gif 或视频。
dotnet/maui
.NET MAUI 是 .NET 多平台应用程序 UI,一个用于构建跨移动、平板和桌面本机应用程序的框架。
版本 下载 最后更新
6.0.2 17,558,565 3/13/2024
6.0.1 3,942,074 2/20/2024
6.0.0 48,524,205 5/21/2023
3.2.0 56,863,771 10/29/2022
3.1.2 93,752,410 2/6/2022
3.1.1 1,294,205 1/30/2022
3.1.0 50,856,978 7/19/2021
3.0.3 16,488,242 2/21/2021
3.0.2 24,309,571 1/24/2021
3.0.1 1,029,178 1/16/2021
3.0.0 678,978 1/9/2021
1.3.0 42,889,997 5/30/2020
1.2.1 6,089,565 4/2/2020
1.2.0 42,056,161 1/3/2020
1.1.0 2,541,775 9/22/2019
1.0.1 20,406,795 7/1/2019
1.0.0 554,180 6/6/2019