Можно ли получить покрытие кода проекта .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" на собственном агенте.