Общие сведения о пакете SDK MSTest
MSTest.Sdk — это пакет SDK для проекта MSBuild для создания приложений MSTest. Можно создать приложение MSTest без этого пакета SDK, однако пакет SDK MSTest:
- Ориентировано на предоставление первоклассного опыта тестирования с помощью MSTest.
- Рекомендуемая цель для большинства пользователей.
- Легко настроить для других пользователей.
Пакет SDK MSTest обнаруживает и запускает ваши тесты с помощью тестовой среды выполнения MSTest.
Вы можете включить MSTest.Sdk
в проекте, просто обновив Sdk
атрибут Project
узла проекта:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Примечание.
/3.6.3
приведен в качестве примера и может быть заменена любой более новой версией.
Чтобы упростить обработку версий, рекомендуется задать версию пакета SDK на уровне решения с помощью файла global.json . Например, файл проекта будет выглядеть следующим образом:
<Project Sdk="MSTest.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Затем укажите версию MSTest.Sdk
в файле global.json следующим образом:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
Дополнительные сведения см. в разделе "Использование пакетов SDK для проекта MSBuild".
При выполнении build
проекта все необходимые компоненты восстанавливаются и устанавливаются с помощью стандартного рабочего процесса NuGet, заданного проектом.
Вам не нужно ничего другого для сборки и выполнения тестов, и вы можете использовать те же средства (например, dotnet test
Visual Studio), которые используются классическим проектом MSTest.
Внимание
Выбирая MSTest.Sdk
, вы соглашаетесь использовать тестовый запускатор MSTest, включая с помощью dotnet test. Это требует изменения вызовов CI и локальных вызовов CLI, а также влияет на доступные записи в .runsettings. Вы можете использовать MSTest.Sdk
и по-прежнему сохранять старые интеграции и средства, вместо этого переключив средство выполнения.
Выберите бегуна
По умолчанию пакет SDK MSTest использует средство выполнения MSTest, но можно переключиться на VSTest , добавив свойство <UseVSTest>true</UseVSTest>
.
Расширение запуска MSTest
Вы можете настроить MSTest runner
интерфейс с помощью набора расширений пакетов NuGet. Чтобы упростить и улучшить этот интерфейс, пакет SDK MSTest представляет две функции:
Профиль исполняющей среды MSTest
Концепция профилей позволяет выбрать набор конфигураций и расширений по умолчанию, которые будут применяться к тестовом проекту.
Профиль можно задать с помощью свойства TestingExtensionsProfile
одним из следующих трех профилей:
None
— расширения не включены.Default
— включает рекомендуемые расширения для этой версии MSTest.SDK. Это значение по умолчанию, если свойство не задано явным образом.Включает следующие расширения:
AllMicrosoft
— включите все расширения, отправленные корпорацией Майкрософт (включая расширения с ограничивающей лицензией).Включает следующие расширения:
Fakes (MSTest.Sdk 3.7.0+)
Ниже приведен полный пример использования None
профиля:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Расширение или профиль | Никакой | По умолчанию | AllMicrosoft |
---|---|---|---|
покрытие кода | ✔️ | ✔️ | |
дамп памяти при сбое | ✔️ | ||
Подделки | ✔️ (MSTest.Sdk 3.7.0+) | ||
дамп зависания | ✔️ | ||
горячая перезагрузка | ✔️ | ||
повторная попытка | ✔️ | ||
Trx | ✔️ | ✔️ |
Включение или отключение расширений
Расширения можно включить и отключить с помощью свойств MSBuild с шаблоном Enable[NugetPackageNameWithoutDots]
.
Например, чтобы активировать расширение для аварийных дампов (пакет NuGet Microsoft.Testing.Extensions.CrashDump), можно задать следующее свойство EnableMicrosoftTestingExtensionsCrashDump
true
:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Список всех доступных расширений см. в разделе "Расширения Microsoft.Testing.Platform".
Предупреждение
Важно проверить условия лицензирования для каждого расширения, так как они могут отличаться.
Включенные и отключенные расширения объединяются с расширениями, предоставляемыми выбранным профилем расширения.
Этот шаблон свойства можно использовать для включения дополнительного расширения поверх неявного профиля Default
(как показано в предыдущем примере CrashDumpExtension).
Вы также можете отключить расширение, которое поступает из выбранного профиля. Например, отключите MS Code Coverage
расширение, задав :<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Функции
Помимо выбора двигателей и расширений, специфичных для них, MSTest.Sdk
также предоставляет дополнительные функции, упрощающие и повышающие возможности вашего тестирования.
Тестирование с помощью .NET Aspire
.NET Aspire — это готовый к облаку стек для создания наблюдаемых, готовых к работе рабочих и распределенных приложений. .NET Aspire предоставляется через коллекцию пакетов NuGet, которые обрабатывают конкретные облачные задачи. Дополнительные сведения см. в документации по .NET Aspire.
Примечание.
Эта функция доступна из MSTest.Sdk 3.4.0
Присвоив свойству EnableAspireTesting
значение true
, можно получить все необходимые зависимости и директивы по умолчанию using
для тестирования с помощью Aspire
и MSTest
.
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Тестирование с помощью Playwright
Playwright обеспечивает надежное комплексное тестирование для современных веб-приложений. Официальную документацию Playwright см. для получения дополнительной информации.
Примечание.
Эта функция доступна из MSTest.Sdk 3.4.0
Установив свойство EnablePlaywright
в true
, вы можете обеспечить все необходимые зависимости и директивы по умолчанию using
для тестирования с помощью Playwright
и MSTest
.
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
<!-- references to the code to test -->
</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": "3.6.3"
}
}
Затем можно начать упрощение проекта.
Удалите свойства по умолчанию:
- <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
После обновления проектов, если вы используете MSTest runner
(по умолчанию) и полагаетесь на dotnet test
для проведения тестов, необходимо обновить конфигурацию CI. Дополнительные сведения и руководство по пониманию всех необходимых изменений см. в статье dotnet test integration.
Ниже приведен пример обновления при использовании DotNetCoreCLI
задачи в Azure DevOps:
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -p:TestingPlatformCommandLineArguments="--report-trx --results-directory $(Agent.TempDirectory) --coverage"'
Известные ограничения
Пакеты SDK для NuGet, предоставляемые MSBuild (включая MSTest.Sdk), имеют ограниченную поддержку инструментов при обновлении его версии, что означает, что обычное обновление NuGet и пользовательский интерфейс Visual Studio для управления пакетами NuGet не работает должным образом. Более подробную информацию можно найти по этой проблеме: NuGet#13127.
Примечание.
Это ограничение не является специфическим для пакета SDK MSTest, а касается любого пакета SDK для MSBuild, предоставляемого NuGet.
Dependabot будет обрабатывать обновление версии в файле global.json
, но вам потребуется вручную обновить версию в файле проекта.