Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются дополнительные параметры конфигурации для MSTest.Sdk. Основные сведения о настройке и начале работы см. в разделе Начало работы с помощью MSTest.
Внимание
По умолчанию MSTest.Sdk использует тестовый ранер MSTest с MTP, в том числе с dotnet test. Для этого требуется изменить вызовы CI и локального CLI, а также влияет на доступные записи в файле .runsettings. Вы можете сохранить старые интеграции и средства, переключившись на VSTest.
MSTest.Sdk устанавливает EnableMSTestRunner и TestingPlatformDotnetTestSupport в значение true по умолчанию. Дополнительные сведения о dotnet test и его различных режимах см. в разделе "Тестирование с помощью dotnet test".
Вспомогательные библиотеки для тестирования утилит
Если проект, использующий MSTest.Sdk, предназначен для того, чтобы быть вспомогательной библиотекой для тестирования и сам по себе не содержит выполняемых тестов, проект должен иметь <IsTestApplication>false</IsTestApplication>.
Выберите бегуна
По умолчанию пакет SDK MSTest использует MTP, но можно переключиться на VSTest , добавив свойство <UseVSTest>true</UseVSTest>.
Расширение MTP
Интерфейс MTP можно настроить с помощью набора расширений пакетов NuGet. Чтобы упростить и улучшить этот интерфейс, пакет SDK MSTest представляет две функции:
Microsoft.Testing.Platform профиль
Понятие profiles позволяет выбрать набор конфигураций и расширений по умолчанию, которые будут применяться к тестовому проекту.
Профиль можно задать с помощью свойства TestingExtensionsProfile одним из следующих трех профилей:
None— расширения не включены.Default— включает рекомендуемые расширения для этой версии MSTest.SDK. Это значение по умолчанию, если свойство не задано явным образом.Включает следующие расширения:
- покрытие кода
- Отчет Trx
- отчет Azure DevOps (MSTest.Sdk 4.3.0+)
- отчет GitHub Actions (экспериментальный и предварительный выпуск, MSTest.Sdk 4.3.0+)
AllMicrosoft— включает расширения Microsoft, выбранные для широкого использования по умолчанию, включая расширения с ограничительной лицензией. Экспериментальные расширения и расширения, доступные только через API, по-прежнему могут требовать явного подтверждения.Включает все расширения из
Defaultпрофиля, а также следующие расширения:- дамп памяти при сбое
- Поддельные (MSTest.Sdk 3.7.0+)
- дамп зависания
- Горячая перезагрузка
- HTML-отчет
- повторная попытка
В версиях MSTest.Sdk с 3.11.0 по 4.2.x расширение Azure DevOps Report включено только в
AllMicrosoft.
Примечание.
Профили ссылаются на пакеты Azure DevOps Report и GitHub Actions Report, но формирование отчетов остается отключенным во время выполнения. Передайте --report-azdo, чтобы включить отчетность Azure DevOps. Чтобы включить отчётность GitHub Actions, запустите тесты в GitHub Actions и передайте параметр --report-gh.
Ниже приведен полный пример использования None профиля:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
| Расширение или профиль | Никакой | По умолчанию | AllMicrosoft |
|---|---|---|---|
| покрытие кода | ✔️ | ✔️ | |
| дамп памяти при сбое | ✔️ | ||
| Подделки | ✔️¹ | ||
| дамп зависания | ✔️ | ||
| Горячая перезагрузка | ✔️ | ||
| HTML-отчет | ✔️ | ||
| Отчет GitHub Actions | ✔️³ | ✔️³ | |
| повторная попытка | ✔️ | ||
| Trx | ✔️ | ✔️ | |
| отчет Azure DevOps | ✔️³ | ✔️² |
¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+
Включение или отключение расширений
Расширения можно включить и отключить с помощью свойств MSBuild с шаблоном Enable[NugetPackageNameWithoutDots].
Например, чтобы включить расширение аварийного дампа (пакет NuGet Microsoft. Testing.Extensions.CrashDump) можно использовать следующее свойство EnableMicrosoftTestingExtensionsCrashDump для параметра true:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
Список всех доступных расширений см. в разделе "Функции MTP".
Некоторые расширения MTP остаются необязательными и не включены в профили Default или AllMicrosoft:
- Начиная с MSTest.Sdk 4.3, задайте
<EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>, а затем передайте--report-junit. - Начиная с предварительной версии MSTest.Sdk 4.4, задайте
<EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>, а затем передайте--report-ctrf. - Чтобы сослаться на расширение OpenTelemetry, задайте значение
<EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>. Так как расширение требует конфигурации API, зарегистрируйте его в пользовательской точке входа, как описано в openTelemetry.
Эти расширения доступны только с помощью MTP.
Предупреждение
Важно проверить условия лицензирования для каждого расширения, так как они могут отличаться.
Включенные и отключенные расширения объединяются с дополнениями, предоставляемыми выбранным профилем дополнений.
Этот шаблон свойства можно использовать для включения дополнительного расширения поверх неявного профиля Default (как показано в предыдущем примере CrashDumpExtension).
Вы также можете отключить расширение, которое поступает из выбранного профиля. Например, отключите MS Code Coverage расширение, задав :<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
В MSTest.Sdk 4.3.0 и более поздних версиях профиль Default включает ссылки на пакеты Azure DevOps Report и GitHub Actions Report. Чтобы удалить ссылку на пакет, задать <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> или <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport>. Если сохранить ссылки на пакеты, отчёт Azure DevOps запускается только при передаче --report-azdo. Формирование отчетов в GitHub Actions начинается только тогда, когда вы запускаете тесты в GitHub Actions и передаете --report-gh.
Функции
Помимо выбора двигателей и расширений, специфичных для них, MSTest.Sdk также предоставляет дополнительные функции, упрощающие и повышающие возможности вашего тестирования.
Тестирование с помощью Aspire
Aspire — это облачный, готовый к эксплуатации и отслеживаемый стек для создания распределённых приложений. Aspire поставляется через коллекцию пакетов NuGet, которые решают специфические задачи, нативные для облака. Дополнительные сведения см. в Aspire документации.
Примечание.
Эта функция доступна в MSTest.Sdk 3.4.0.
Присвоив свойству EnableAspireTesting значение true, можно получить все необходимые зависимости и директивы по умолчанию using для тестирования с помощью Aspire и MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
</Project>
Тестирование с помощью Playwright
Playwright позволяет проводить надежное сквозное тестирование для современных веб-приложений. Официальную документацию Playwright см. для получения дополнительной информации.
Примечание.
Эта функция доступна в MSTest.Sdk 3.4.0.
Установив свойство EnablePlaywright в true, вы можете обеспечить все необходимые зависимости и директивы по умолчанию using для тестирования с помощью Playwright и MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
</Project>
Перейти на MSTest SDK
Рассмотрим следующие шаги, необходимые для миграции в пакет SDK MSTest.
Обновите ваш проект
При переносе существующего тестового проекта MSTest в пакет SDK MSTest сначала замените запись Sdk="Microsoft.NET.Sdk" в верхней части тестового проекта Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Добавьте версию в global.json.
{
"msbuild-sdks": {
"MSTest.Sdk": "4.1.0"
}
}
Затем можно начать упрощение проекта.
Удалите свойства по умолчанию:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Удаление ссылок на пакет по умолчанию:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Наконец, на основе используемого профиля расширений можно также удалить некоторые пакеты Microsoft.Testing.Extensions.*.
Обновление CI
После обновления проектов, если вы используете MTP (по умолчанию) и полагаетесь на dotnet test для запуска тестов, необходимо обновить конфигурацию CI. Дополнительные сведения и руководство по пониманию всех необходимых изменений см. в статье dotnet test integration.
Если вы используете режим VSTest dotnet test, ниже приведен пример обновления при использовании задачи DotNetCoreCLI в Azure DevOps:
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'
Экспериментальные функции
Следующие функции MSTest 4.3 являются экспериментальными. Их общедоступные API могут быть изменены, и они отображаются за экспериментальной диагностикой, поэтому выбор требует подтверждения соответствующего идентификатора диагностики. Используйте их с этим предостережением.
Генератор источника отражения
Примечание.
Добавлено в MSTest 4.3.0 (экспериментальная возможность).
Генератор исходного кода MSTest обнаруживает тесты во время компиляции, не полагаясь на рефлексию во время выполнения, что делает тестовые проекты совместимыми с триммингом и Native AOT. Включите его, добавив пакет MSTest.SourceGeneration . Если генератор исходного кода активен, классы тестов должны объявлять [TestClass] напрямую, а не наследовать его; анализатор MSTEST0069 помечает классы, которые полагаются на унаследованный [TestClass].
Начиная с MSTest 4.3.2, для проектов с trimming и Native AOT значение MSTestSourceGenMode по умолчанию равно ReflectionFree.
Начиная с MSTest 4.4, генерация без использования рефлексии формирует полный набор метаданных унаследованных атрибутов, включая AttributeUsage и AllowMultiple. Если генератор не может статически материализовать метаданные, MSTest использует рефлексию, если среда выполнения это поддерживает.
Программная фильтрация тестов с помощью ITestFilter
Примечание.
Добавлено в MSTest 4.3.0 (экспериментальная возможность).
Экспериментальная точка расширения ITestFilter, зарегистрированная с помощью [TestFilterProviderAttribute], позволяет программно определить, будет ли выполняться каждый тест, до загрузки любого тестового класса. Это полезно для пользовательской логики выбора, которая не может быть выражена с фильтрами командной строки.
Реализуйте ITestFilter.Filter(TestFilterContext) для проверки метаданных без загрузки тестового класса:
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) =>
context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
? TestFilterResult.Run : TestFilterResult.Drop;
}
Выберите TestFilterResult.Run, чтобы запустить тест, Drop — чтобы пропустить его без указания результата, или Skip(reason) — чтобы указать, что результат: «пропущен». MSTest может одновременно вызывать один экземпляр фильтра, поэтому реализации должны быть потокобезопасны. Фильтры командной строки и обозревателя тестов применяются до ITestFilter, а [Ignore] оценивается после этого.
Начиная с MSTest 4.4, .NET проекты могут использовать универсальную, типобезопасную форму [assembly: TestFilterProvider<MyFilter>]регистрации. Затем компилятор проверяет, что MyFilter реализует ITestFilter и имеет общедоступный конструктор без параметров. Универсальный атрибут недоступен для платформы .NET Framework. Для многоцелевой проекта выберите универсальную или не универсальную форму с символом препроцессора целевой платформы.
#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif
Начиная с MSTest 4.4 анализатор MSTEST0081 полностью проверяет форму не универсальной регистрации. Для обобщённого варианта он по-прежнему сообщает об обобщённых типах фильтров и сборках, регистрирующих более одного поставщика.
TestRun.Current и запланированные тесты
Примечание.
Добавлено в MSTest 4.3.0 (экспериментальная возможность).
Экспериментальный API TestRun.Current (из RFC 014) предоставляет информацию о текущем запуске, включая набор запланированных тестов, чтобы расширения и фикстуры могли проверить, что запланировано к выполнению.
Известные ограничения
Пакеты SDK для NuGet, предоставляемые MSBuild (включая MSTest.Sdk), имеют ограниченную поддержку инструментов при обновлении их версии, что означает, что стандартное обновление NuGet и пользовательский интерфейс Visual Studio для управления пакетами NuGet не работает должным образом. Необходимо вручную обновить версию в файле global.json и в файле project. (Это применимо, даже если вы используете Dependabot из-за проблем dependabot-core#12824 и dependabot-core#8615.)
См. также
- Свойства, связанные с MTP
- свойства, связанные с VSTest