Прочитать на английском

Поделиться через


Общие сведения о пакете SDK MSTest

MSTest.Sdk — это пакет SDK проекта MSBuild для создания приложений MSTest. Можно создать приложение MSTest без этого пакета SDK, однако пакет SDK MSTest:

  • Ориентировано на предоставление первоклассного опыта тестирования с помощью MSTest.
  • Рекомендуемая цель для большинства пользователей.
  • Легко настроить для других пользователей.

По умолчанию пакет SDK MSTest обнаруживает и выполняет тесты с помощью средства запуска MSTest для Microsoft.Testing.Platform. Вы можете переключиться на использование VSTest, указав <UseVSTest>true</UseVSTest>

Вы можете включить MSTest.Sdk в проекте, просто обновив Sdk атрибут Project узла проекта:

XML
<Project Sdk="MSTest.Sdk/3.8.3">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

</Project>

Примечание

/3.8.3 приведен в качестве примера и может быть заменена любой более новой версией.

Чтобы упростить обработку версий, рекомендуется задать версию пакета SDK на уровне решения с помощью файла global.json . Например, файл проекта будет выглядеть следующим образом:

XML
<Project Sdk="MSTest.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

</Project>

Затем укажите версию MSTest.Sdk в файле global.json следующим образом:

JSON
{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.8.3"
    }
}

Дополнительные сведения см. в разделе "Использование пакетов SDK для проекта MSBuild".

При выполнении build проекта все необходимые компоненты восстанавливаются и устанавливаются с помощью стандартного рабочего процесса NuGet, заданного проектом.

Вам не нужно ничего другого для сборки и выполнения тестов, и вы можете использовать те же средства (например, dotnet test Visual Studio), которые используются классическим проектом MSTest.

Важно!

Переключившись на MSTest.Sdk, вы выбираете использование средства запуска MSTest (включая Microsoft.Testing.Platform для MSTest), в том числе с помощью dotnet test. Это требует изменения вызовов CI и локальных вызовов CLI, а также влияет на доступные записи в .runsettings. Вы можете использовать MSTest.Sdk и по-прежнему сохранять старые интеграции и средства, переключив вместо этого раннер. По умолчанию наборы EnableMSTestRunner MSTest.Sdk и TestingPlatformDotnetTestSupport значение true. Дополнительные сведения о тесте dotnet и его различных режимах запуска Microsoft.Testing.Platform см. в разделе "Тестирование с помощью dotnet test".

Выберите бегуна

По умолчанию пакет SDK MSTest использует Microsoft.Testing.Platform, но можно перейти на VSTest, добавив свойство <UseVSTest>true</UseVSTest>.

Расширьте Microsoft.Testing.Platform

Вы можете настроить Microsoft.Testing.Platform опыт с помощью набора расширений пакетов NuGet. Чтобы упростить и улучшить этот интерфейс, пакет SDK MSTest представляет две функции:

Профиль Microsoft.Testing.Platform

Концепция профилей позволяет выбрать набор конфигураций и расширений по умолчанию, которые будут применяться к тестовом проекту.

Профиль можно задать с помощью свойства TestingExtensionsProfile одним из следующих трех профилей:

Ниже приведен полный пример использования None профиля:

XML
<Project Sdk="MSTest.Sdk/3.8.3">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

</Project>
Расширение или профиль Никакой По умолчанию AllMicrosoft
покрытие кода ✔️ ✔️
дамп памяти при сбое ✔️
Подделки ✔️ (MSTest.Sdk 3.7.0+)
дамп зависания ✔️
горячая перезагрузка ✔️
повторная попытка ✔️
Trx ✔️ ✔️

Включение или отключение расширений

Расширения можно включить и отключить с помощью свойств MSBuild с шаблоном Enable[NugetPackageNameWithoutDots].

Например, чтобы активировать расширение для аварийных дампов (пакет NuGet Microsoft.Testing.Extensions.CrashDump), можно задать следующее свойство EnableMicrosoftTestingExtensionsCrashDumptrue:

XML
<Project Sdk="MSTest.Sdk/3.8.3">

<PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

</Project>

Список всех доступных расширений см. в разделе "Расширения Microsoft.Testing.Platform".

Предупреждение

Важно проверить условия лицензирования для каждого расширения, так как они могут отличаться.

Включенные и отключенные расширения объединяются с дополнениями, предоставляемыми выбранным профилем дополнений.

Этот шаблон свойства можно использовать для включения дополнительного расширения поверх неявного профиля Default (как показано в предыдущем примере CrashDumpExtension).

Вы также можете отключить расширение, которое поступает из выбранного профиля. Например, отключите MS Code Coverage расширение, задав :<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>

XML
<Project Sdk="MSTest.Sdk/3.8.3">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

</Project>

Функции

Помимо выбора двигателей и расширений, специфичных для них, MSTest.Sdk также предоставляет дополнительные функции, упрощающие и повышающие возможности вашего тестирования.

Тестирование с помощью .NET Aspire

.NET Aspire — это облачный стек с жёстко заданной структурой для создания наблюдаемых, готовых к эксплуатации и распределённых приложений. .NET Aspire предоставляется через коллекцию пакетов NuGet, которые обрабатывают конкретные облачные задачи. Дополнительные сведения см. в документации по .NET Aspire.

Примечание

Эта функция доступна из MSTest.Sdk 3.4.0

Присвоив свойству EnableAspireTesting значение true, можно получить все необходимые зависимости и директивы по умолчанию using для тестирования с помощью Aspire и MSTest.

XML
<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

</Project>

Тестирование с помощью Playwright

Playwright обеспечивает надежное комплексное тестирование для современных веб-приложений. Официальную документацию Playwright см. для получения дополнительной информации.

Примечание

Эта функция доступна из MSTest.Sdk 3.4.0

Установив свойство EnablePlaywright в true, вы можете обеспечить все необходимые зависимости и директивы по умолчанию using для тестирования с помощью Playwright и MSTest.

XML
<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

</Project>

Перейти на MSTest SDK

Рассмотрим следующие шаги, необходимые для миграции в пакет SDK MSTest.

Обновление проекта

При переносе существующего тестового проекта MSTest в пакет SDK MSTest сначала замените Sdk="Microsoft.NET.Sdk" запись в верхней части тестового проекта на Sdk="MSTest.Sdk"

diff
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"

Добавьте версию в global.json.

JSON
{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.8.3"
    }
}

Затем можно начать упрощение проекта.

Удалите свойства по умолчанию:

diff
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>

Удаление ссылок на пакет по умолчанию:

diff
- <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

После обновления проектов, если вы используете Microsoft.Testing.Platform (по умолчанию) и полагаетесь на dotnet test для проведения тестов, необходимо обновить конфигурацию CI. Дополнительные сведения и руководство по пониманию всех необходимых изменений см. в статье dotnet test integration.

Если вы используете режим dotnet testVSTest, вот пример обновления при использовании задачи DotNetCoreCLI в Azure DevOps.

diff
\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -- --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, но вам потребуется вручную обновить версию в файле проекта.

См. также


Дополнительные ресурсы

Обучение

Модуль

Тестирование C# в Visual Studio - Training

Начните тестирование приложений C# с помощью средств тестирования Visual Studio. Научитесь создавать тесты, пользоваться обозревателем тестов, создавать наборы тестов, а также применять принцип "ошибка-успех-рефакторинг" в создании кода.

Сертификация

Сертифицировано Microsoft: Power Platform Developer Associate - Certifications

Узнайте, как упростить, автоматизировать и преобразовать бизнес-задачи и процессы с помощью разработчика Microsoft Power Platform.