Выполнение тестов с помощью MSTest

Подсказка

Перед выбором конфигурации раннера см. Обзор тестовых платформ.

Существует несколько способов выполнения тестов MSTest в зависимости от ваших потребностей. Вы можете выполнять тесты из интегрированной среды разработки (например, Visual Studio, Visual Studio код или JetBrains Rider), либо из командной строки или из службы CI (например, GitHub Actions или Azure DevOps).

Исторически MSTest опиралась на VSTest для выполнения тестов во всех контекстах, но начиная с версии 3.2.0, MSTest имеет собственный модуль тестирования. Этот новый раннер более легковесный и быстрый, чем VSTest, и рекомендуется для запуска тестов MSTest.

VSTest и MTP

MSTest поддерживает выполнение тестов с помощью VSTest и Microsoft.Testing.Platform (MTP). Поддержка MTP обеспечивается с помощью средства запуска MSTest, который может выполнять тесты в любых контекстах (например, конвейеры непрерывной интеграции (CI), CLI, Обозреватель тестов Visual Studio и текстовый обозреватель VS Code). Средство выполнения MSTest встроено прямо в ваши тестовые проекты MSTest, и для запуска тестов не требуются другие зависимости приложений, такие как vstest.console или dotnet test. Однако вы по-прежнему можете выполнять тесты с помощью dotnet test.

Средство выполнения MSTest — это с открытым исходным кодом и основано на библиотеке MTP. Код Microsoft.Testing.Platform можно найти в репозитории microsoft/testfx GitHub. Раннер MSTest поставляется вместе с MSTest in 3.2.0 или более поздней версией.

Включение MTP в проекте MSTest

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

MSTest.Sdk заменяется Microsoft.NET.Sdk пакетом SDK для проекта, а MTP включен по умолчанию:

<Project Sdk="MSTest.Sdk/4.1.0">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Note

MSTest.Sdk работает только в том случае, если проект может использовать Microsoft.NET.Sdk в качестве базового пакета SDK. Если для вашего проекта требуется другой пакет SDK, не заменяйте значение <Project Sdk="..."> на MSTest.Sdk.

Например, некоторые проекты интеграционных тестов ASP.NET Core используют Microsoft.NET.Sdk.Web. MSTest.Sdkявляется производным от Microsoft.NET.Sdk, поэтому он не импортирует целевые объекты пакета SDK ASP.NET Core, которые Microsoft.NET.Sdk.Web предоставляют.

Кроме того, можно вручную настроить MSTest вместо использования MSTest.Sdk. Настройка вручную требуется, если для проекта требуется другой пакет SDK верхнего уровня (например, Microsoft.NET.Sdk.Web), но вы также можете выбрать его с помощью стандартного Microsoft.NET.Sdkпакета SDK. Добавьте свойство EnableMSTestRunner и задайте для OutputType значение Exe в файле проекта. Затем добавьте ссылки MSTest, необходимые для проекта. Убедитесь, что вы используете MSTest 3.2.0 или более поздней версии, а затем обновите последнюю версию MSTest.

Рассмотрим следующий пример project файла:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- Enable Microsoft.Testing.Platform, this is an opt-in feature -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!--
      Displays error on console in addition to the log file. Note that this feature comes with a performance impact.
      For more information, visit https://learn.microsoft.com/dotnet/core/testing/unit-testing-with-dotnet-test#show-failure-per-test
      -->
    <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>

    <OutputType>Exe</OutputType>

    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <!--
      MSTest meta package is the recommended way to reference MSTest.
      It's equivalent to referencing:
          Microsoft.NET.Test.Sdk
          MSTest.TestAdapter
          MSTest.TestFramework
          MSTest.Analyzers
      Starting with 3.8, it also includes:
          Microsoft.Testing.Extensions.TrxReport
          Microsoft.Testing.Extensions.CodeCoverage
    -->
    <PackageReference Include="MSTest" Version="4.1.0" />
  </ItemGroup>

</Project>

Подсказка

Чтобы убедиться, что все тестовые проекты в решении используют фреймворк запуска MSTest, задайте свойства EnableMSTestRunner и TestingPlatformDotnetTestSupport в файле Directory.Build.props вместо отдельных файлов проектов.

Конфигурации и фильтры

.runsettings

MTP поддерживает параметры запуска с помощью параметра --settings командной строки. Для получения полного списка поддерживаемых записей MSTest ознакомьтесь с разделом "Настройка MSTest: Runsettings". В следующих командах показаны различные примеры использования.

Использование dotnet run:

dotnet run --project Contoso.MyTests -- --settings config.runsettings

Использование dotnet exec:

dotnet exec Contoso.MyTests.dll --settings config.runsettings

–или–

dotnet Contoso.MyTests.dll --settings config.runsettings

Использование исполняемого файла:

Contoso.MyTests.exe --settings config.runsettings

Фильтр тестов

Вы можете легко предоставить фильтр тестов с помощью параметра --filterкомандной строки. В следующих командах показаны некоторые примеры.

Использование dotnet run:

dotnet run --project Contoso.MyTests -- --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Использование dotnet exec:

dotnet exec Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

–или–

dotnet Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Использование исполняемого файла:

Contoso.MyTests.exe --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

См. также