Можно ли получить покрытие кода проекта .NET Framework с помощью coverlet в Azure DevOps?

Я легко настроился на получение результата покрытия для .NET Core Проекты в Azure DevOps, но безуспешно .NET FrameworkПроекты.
Итак, я был бы очень благодарен за предложение по этому поводу, потому что в документации на обложку ясно сказано, что мы также можем использовать его для.NET FrameworkПроекты. Этот вопрос похож на мой, но я не нашел там ответа. Можете ли вы использовать Coverlet для получения данных о покрытии кода в проекте.NET Framework?

2 ответа

Решение

Наконец, я нашел более простое решение. Вот,

  • добавлять <IsTestProject>true</IsTestProject> в файле тестового проекта.

  • Запустите одобрение dotnet test/dotnet test /p:CollectCoverage=true находиться в местоположении тестового проекта (где существует TestProject.csproj)

  • Вы можете получить следующую ошибку после запуска команды,

    Импортированный проект "C:\Program Files\dotnet\sdk\3.1.100\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" не найден.

  • В файле проекта (который вы хотите выполнить модульное тестирование и получить покрытие кода) измените следующий оператор импорта

    Эта, <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

    Чтобы, <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />

У меня это сработало как локально, так и с Azure DevOps.

Примечание: не забудьте установить Coverlet.msbuild в свой тестовый проект.

Обновить:

Вышеупомянутый подход работает только в том случае, если вы не получаете ошибку ".Microsoft.WebApplication.targets не найден". Комментирование предложенного оператора импорта приведет к сбою публикации в конце, что очевидно. Итак, в итоге я использовал Coverlet.Console, и он работал плавно, без ошибок. Но для использования coverlet.console мне понадобилосьTestProject.dllфайл вместо файла проекта (.csproj); поэтому мне пришлось добавить дополнительную задачу сборки для тестового проекта. Вот документация по установке и использованию Coverlet.console.

Надеюсь, это будет полезно для тех, кто окажется здесь.

Да, вы можете кодировать данные покрытия из проекта ASP.NET. И это просто, как предлагает @riQQ в этой теме.

Следующее содержимое предназначено для дополнений и воспроизведения ответа @riQQ в приведенной выше теме.

Подготовил приложение веб-формы и модульный тест.net framework, добавил coverlet.runsettingsфайл в репо, контент , ссылающийся на параметры Coverlet, поддерживаемые интеграцией VSTest:

<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="XPlat code coverage">
        <Configuration>
          <Format>json,cobertura</Format>          
          <Exclude>[coverlet.*.tests?]*,[*]Coverlet.Core*</Exclude> <!-- [Assembly-Filter]Type-Filter -->
          <Include>[coverlet.*]*,[*]Coverlet.Core*</Include> <!-- [Assembly-Filter]Type-Filter -->
          <ExcludeByAttribute>Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute</ExcludeByAttribute>
          <ExcludeByFile>../dir1/class1.cs,../dir2/*.cs,../dir3/**/*.cs,</ExcludeByFile> <!-- Absolute or relative file paths -->
          <IncludeDirectory>../dir1/,../dir2/,</IncludeDirectory>
          <SingleHit>false</SingleHit>
          <UseSourceLink>true</UseSourceLink>
          <IncludeTestAssembly>true</IncludeTestAssembly>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Настройте задачу VSTest:

Он может успешно создать файл покрытия:

Passed   TestMethod1
Results File: D:\a\_temp\TestResults\VssAdministrator_fv-az38_2020-03-17_07_53_28.trx
Attachments:
  D:\a\_temp\TestResults\*******-****-****-****-**********\VssAdministrator_fv-az38 2020-03-17 07_53_18.coverage
Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.
Test Run Successful.

Примечание. Если вы хотите запустить эту сборку на собственном агенте, вам может потребоваться убедиться, что VS Enterprise установлен, см. "Не удается найти CodeCoverage.exe" на собственном агенте.

Другие вопросы по тегам