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


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

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

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

VSTest и Microsoft.Testing.Platform (MTP)

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

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

Включение Microsoft.Testing.Platform в проекте MSTest

Рекомендуется использовать пакет SDK MSTest , так как он значительно упрощает конфигурацию проекта и обновляет проект, и обеспечивает правильное выравнивание версий платформы (Microsoft.Testing.Platform) и его расширений.

При использовании MSTest SDKпо умолчанию вы решили использовать Microsoft.Testing.Platform.

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

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

</Project>

Кроме того, можно включить тестовый прогонщик MSTest, добавив EnableMSTestRunner и задав его значение как OutputTypeExe в файл проекта. Также убедитесь, что вы используете MSTest 3.2.0 или более позднюю версию. Настоятельно рекомендуется обновить последнюю версию MSTest.

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

<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/microsoft-testing-platform-integration-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, задайте EnableMSTestRunnerTestingPlatformDotnetTestSupport свойства в файле Directory.Build.props вместо отдельных файлов проекта.

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

.runsettings

Microsoft.Testing.Platform поддерживает runsettings через параметр командной строки --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"

См. также