Uruchamianie testów za pomocą narzędzia MSTest

Wskazówka

Przed wybraniem konfiguracji modułu uruchamiającego zobacz Omówienie platform testowych.

Istnieje kilka sposobów uruchamiania testów MSTest w zależności od potrzeb. Testy można uruchamiać z poziomu środowiska IDE (na przykład Visual Studio, Visual Studio Code lub JetBrains Rider), z wiersza polecenia, lub z usługi ciągłej integracji (na przykład GitHub Actions lub Azure DevOps).

W przeszłości narzędzie MSTest polegało na VSTest do uruchamiania testów we wszystkich kontekstach, ale począwszy od wersji 3.2.0, narzędzie MSTest ma własny moduł uruchamiający testy. Ten nowy uruchamiacz jest lżejszy i szybszy niż VSTest i jest to zalecany sposób uruchamiania testów MSTest.

VSTest vs MTP

Narzędzie MSTest obsługuje uruchamianie testów zarówno z narzędziami VSTest i Microsoft.Testing.Platform (MTP). Obsługę MTP umożliwia moduł uruchamiający MSTest, który może uruchamiać testy w różnych kontekstach (na przykład w pipeline'ach ciągłej integracji (CI), CLI, Exploratorem testów Visual Studio oraz Exploratorem testów programu VS Code). Moduł uruchamiający MSTest jest osadzony bezpośrednio w projektach testowych MSTest i nie ma żadnych innych zależności aplikacji, takich jak vstest.console lub dotnet test, wymaganych do uruchamiania testów. Jednak nadal można uruchamiać testy przy użyciu polecenia dotnet test.

Moduł uruchamiający MSTest jest open source i opiera się na bibliotece MTP. Kod Microsoft.Testing.Platform można znaleźć w repozytorium microsoft/testfx GitHub. Moduł uruchamiający MSTest jest dostarczany z pakietem MSTest in 3.2.0 lub nowszym.

Włączanie protokołu MTP w projekcie MSTest

Zaleca się używanie zestawu MSTest SDK , ponieważ znacznie upraszcza konfigurację projektu i aktualizowanie projektu, a także zapewnia prawidłowe dopasowanie wersji platformy (MTP) i jego rozszerzeń.

W przypadku korzystania z usługi MSTest SDKdomyślnie użytkownik decyduje się na korzystanie z protokołu MTP.

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

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

</Project>

Alternatywnie możesz włączyć moduł uruchamiający MSTest, dodając właściwość EnableMSTestRunner i ustawiając OutputType na Exe w pliku project. Należy również upewnić się, że używasz MSTest 3.2.0 lub nowszego. Zdecydowanie zalecamy aktualizację do najnowszej dostępnej wersji MSTest.

Rozważmy następujący przykładowy plik 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>

Wskazówka

Aby upewnić się, że wszystkie projekty testowe w rozwiązaniu korzystają z testera MSTest, ustaw właściwość EnableMSTestRunner i TestingPlatformDotnetTestSupport w pliku Directory.Build.props zamiast pojedynczych plików projektów.

Konfiguracje i filtry

.runsettings

Protokół MTP obsługuje runsettings za pośrednictwem opcji --settings wiersza polecenia. Aby uzyskać pełną listę obsługiwanych wpisów MSTest, zobacz Konfigurowanie MSTest: Runsettings. Poniższe polecenia pokazują różne przykłady użycia.

Używając dotnet run:

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

Używając dotnet exec:

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

— lub —

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

Przy użyciu pliku wykonywalnego:

Contoso.MyTests.exe --settings config.runsettings

Filtr testów

Można filtrować testy bezproblemowo, używając opcji wiersza polecenia filter--filter. W poniższych poleceniach przedstawiono kilka przykładów.

Używając dotnet run:

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

Używając dotnet exec:

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

— lub —

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

Przy użyciu pliku wykonywalnego:

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

Zobacz także