Общие сведения о пакете SDK MSTest
Представлено в .NET 9, MSTest.Sdk — это пакет SDK проекта MSBuild для создания приложений MSTest. Однако можно создать приложение MSTest без этого пакета SDK, но пакет SDK MSTest:
- Адаптировано к обеспечению первого класса для тестирования с помощью MSTest.
- рекомендуется для большинства пользователей.
- Легко настроить для других пользователей.
Пакет SDK MSTest обнаруживает и запускает тесты с помощью средства выполнения MSTest.
Вы можете включить MSTest.Sdk
в проекте, просто обновив Sdk
атрибут Project
узла проекта:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Примечание.
/3.3.1
в качестве примера используется первая версия пакета SDK, но ее можно заменить любой новой версией.
Чтобы упростить обработку версий, рекомендуется задать версию пакета 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.3.1"
}
}
Дополнительные сведения см. в разделе "Использование пакетов SDK для проекта MSBuild".
При выполнении build
проекта все необходимые компоненты восстанавливаются и устанавливаются с помощью стандартного рабочего процесса NuGet, заданного проектом.
Вам не нужно ничего другого для сборки и выполнения тестов, и вы можете использовать те же средства (например, dotnet test
Visual Studio), которые используются классическим проектом MSTest.
Внимание
Переключившись на средство запуска MSTest, в том числе с помощью dotnet test.MSTest.Sdk
Это требует изменения вызовов CI и локальных интерфейсов командной строки, а также влияет на доступные записи запусков .runsettings. Вы можете использовать MSTest.Sdk
и по-прежнему сохранять старые интеграции и средства, вместо этого переключив средство выполнения.
Выберите средство выполнения
По умолчанию пакет SDK MSTest использует средство выполнения MSTest, но можно переключиться на VSTest , добавив свойство <UseVSTest>true</UseVSTest>
.
Расширение runner MSTest
Вы можете настроить MSTest runner
интерфейс с помощью набора расширений пакетов NuGet. Чтобы упростить и улучшить этот интерфейс, пакет SDK MSTest представляет две функции:
Профиль runner MSTest
Концепция профилей позволяет выбрать набор конфигураций и расширений по умолчанию, которые будут применяться к тестовом проекту.
Профиль можно задать с помощью свойства TestingExtensionsProfile
одним из следующих трех профилей:
Default
— включает рекомендуемые расширения для этой версии MSTest.SDK. Это значение по умолчанию, если свойство не задано явным образом.None
— расширения не включены.AllMicrosoft
— включите все расширения, отправленные корпорацией Майкрософт (включая расширения с ограничивающей лицензией).
Ниже приведен полный пример использования None
профиля:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Включение или отключение расширений
Расширения можно включить и отключить с помощью свойств MSBuild с шаблоном Enable[NugetPackageNameWithoutDots]
.
Например, чтобы включить расширение аварийного дампа (пакет NuGet Microsoft.Testing.Extensions.CrashDump), можно использовать следующее свойство EnableMicrosoftTestingExtensionsCrashDump
true
:
<Project Sdk="MSTest.Sdk/3.3.1">
<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.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Функции
За пределами выбора модулей runner и runner для конкретных 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>
Миграция в пакет SDK MSTest
Рассмотрим следующие шаги, необходимые для миграции в пакет 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.3.1"
}
}
Затем можно начать упрощение проекта.
Удалите свойства по умолчанию:
- <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"'