7

我有一个大型 .NET Framework 解决方案,并希望开始收集代码覆盖率数据作为我们构建管道的一部分(以及在我们的本地开发人员机器上)。

在 Coverlet GitHub 页面上,它说它支持 .NET Framework 项目,但所有示例都使用dotnet testCLI 命令。

是否可以为此使用 Coverlet,或者我应该查看 OpenCover 之类的东西?

4

3 回答 3

2
  1. 安装 Coverlet.MSbuild
  2. 安装 Coverlet.Collector
  3. 重建项目
  4. 单击工具 > Nuget 包管理器 > 包管理器控制台
  5. dotnet test --collect:"XPlat Code Coverage"
  6. 在“TestResults”文件夹中找到所需的coverage.cobertura.xml 文件
  7. (可选)如果您想要图形界面来读取文件并以更方便的方式呈现结果,请在 AzureDevops 中部署您的解决方案
于 2021-03-25T11:15:52.500 回答
1

选项1

如果这不起作用,请使用任务发布测试任务生成Publish code coverage results的 corbertura 文件(默认名称:)coverage.cobertura.xml


选项 2

  • 将以下 NuGet 包添加到您的测试项目
    • 封面.msbuild
    • Microsoft.NET.Test.Sdk
    • 微软测试平台
    • Microsoft.TestPlatform.Build
  • 将属性组添加到您的测试项目文件 (.csproj)
<PropertyGroup>
    <VSTestTaskAssemblyFile>$(MSBuildThisFileDirectory)\..\packages\Microsoft.TestPlatform.Build.16.6.1\lib\netstandard2.0\Microsoft.TestPlatform.Build.dll</VSTestTaskAssemblyFile>
    <VSTestConsolePath>$(MSBuildThisFileDirectory)..\packages\Microsoft.TestPlatform.Portable.16.6.1\tools\netcoreapp2.1\vstest.console.dll</VSTestConsolePath>
    <CoverletOutputFormat>cobertura</CoverletOutputFormat>
</PropertyGroup>
  • 使用MSBuild任务
    • 使用以下命令行参数:
      <your-project>.csproj /p:CollectCoverage=true /t:VSTest
  • 使用任务发布任务产生Publish code coverage results的corbertura文件(默认名称:)coverage.cobertura.xmlMSBuild
于 2020-03-16T15:05:51.373 回答
1

我发现所有这些方法都有问题,使用 XAML 应用程序构建一个大型 repo,以及一些旧的项目格式 *.*proj 文件。对我有用的解决方案是:

  • 使用 MSBuild 构建解决方案
  • 从 NuGet 下载 coverlet.collector
  • 使用指定为适配器的覆盖物和 --no-build 运行 dotnet 测试
  • 使用ReportGenerator扩展来组合覆盖率报告
  • 发布代码覆盖率结果

特别是一个问题是设置enableCodeCoverage: true使用了 MS CoverCoverage.exe,它会阻止在 Azure DevOps 中查看格式良好的结果

在 yaml 中,它看起来像:

- task: NuGetCommand@2
  displayName: Restore NuGet Packages
  inputs:
    command: 'restore'
    restoreSolution: Path/To/My.sln
    feedsToUse: 'select'
    vstsFeed: 'MyCompany/PrivateFeed'
    includeNuGetOrg: true

- task: MSBuild@1
  displayName: 'Build'
  inputs:
    solution: Path/To/My.sln
    msbuildArchitecture: 'x64'
    configuration: Release
    msbuildArguments: /p:DebugSymbols=true /p:DebugType=portable -m

- task: NuGetCommand@2
  displayName: 'Restore Coverlet Adapter'
  inputs:
    command: custom
    restoreDirectory: .\
    arguments: 'install coverlet.collector -Version 3.0.3 -ExcludeVersion'

- task: DotNetCoreCLI@2
  inputs:
    command: test
    arguments: Path/To/My.sln --no-build -a $(Build.SourcesDirectory)\coverlet.collector\build\netstandard1.0 --collect:"XPlat Code Coverage"

- task: reportgenerator@4
  inputs:
    reports: $(Pipeline.Workspace)\**\coverage.cobertura.xml
    targetdir: 'coveragereport'
    reporttypes: 'HtmlInline_AzurePipelines;Cobertura'

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: 'coveragereport/cobertura.xml'
    reportDirectory: 'CoverageReport'
于 2021-05-28T13:58:44.297 回答