Можно ли использовать Coverlet для получения данных о покрытии кода в проекте .NET Framework?

У меня есть большое решение.NET Framework, и я хочу начать сбор данных о покрытии кода в рамках нашего конвейера сборки (а также на наших локальных машинах для разработчиков).

На странице Coverlet GitHub говорится, что он поддерживает проекты.NET Framework, но во всех примерах используется dotnet test Команда CLI.

Можно ли для этого использовать Coverlet или мне стоит поискать что-то вроде OpenCover?

3 ответа

  1. Установите Coverlet.MSbuild
  2. Нажмите Инструменты> Диспетчер пакетов Nuget> Консоль диспетчера пакетов.
  3. Бег dotnet test --collect:"XPlat Code Coverage"
  4. В папке TestResults найдите нужный файл extension.cobertura.xml.
  5. (необязательно) Разверните свое решение в AzureDevops, если вы хотите, чтобы графический интерфейс читал файл и представлял результаты в более удобном виде.

Опция 1

Если это не сработает, используйте Publish code coverage results задача, чтобы опубликовать файл corbertura (имя по умолчанию: coverage.cobertura.xml) произведенный тестовым заданием


Вариант 2

  • Добавьте следующие пакеты NuGet в свой тестовый проект
    • coverlet.msbuild
    • Microsoft.NET.Test.Sdk
    • Microsoft.TestPlatform
    • 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.xml) производства MSBuild задача

Я обнаружил, что у всех этих методов есть проблемы, создание большого репозитория с приложениями XAML и некоторые старые файлы проекта формата *.* Proj. Решение, которое сработало для меня, было:

  • Создайте решение с помощью MSBuild
  • Загрузите coverlet.collector с NuGet
  • Запустите тест dotnet с покрытием, указанным в качестве адаптера и --no-build
  • Используйте расширение ReportGenerator для объединения отчетов о покрытии
  • Опубликовать результаты покрытия кода

Одна из проблем заключалась в том, что настройка enableCodeCoverage: true используйте MS CoverCoverage.exe, который затем предотвращает просмотр хорошо отформатированных результатов в Azure DevOps

На ямле это выглядит так:

      - 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'
Другие вопросы по тегам