Общие сведения о пакете 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"'

См. также