Udostępnij przez


Uruchamianie testów za pomocą narzędzia MSTest

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) albo z wiersza polecenia albo z usługi CIĄGŁEj integracji (np. GitHub Actions lub Azure DevOps).

W przeszłości narzędzie MSTest polegało na narzędziu 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 moduł uruchamiający jest bardziej lekki i szybszy niż VSTest i jest to zalecany sposób uruchamiania testów MSTest.

VSTest vs Microsoft.Testing.Platform (MTP)

Narzędzie MSTest obsługuje uruchamianie testów zarówno z narzędziami VSTest i Microsoft.Testing.Platform (MTP). Obsługa protokołu MTP jest obsługiwana przez moduł uruchamiający MSTest, który może uruchamiać testy we wszystkich kontekstach (na przykład potoki ciągłej integracji, interfejsu wiersza polecenia, Eksploratora testów programu Visual Studio i Eksploratora tekstu 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 oprogramowaniem open source i bazuje na Microsoft.Testing.Platform bibliotece. Kod można znaleźć Microsoft.Testing.Platform w repozytorium Microsoft/testfx w witrynie GitHub. Moduł uruchamiający MSTest jest dostarczany z pakietem MSTest in 3.2.0 lub nowszym.

Włączanie platformy Microsoft.Testing.Platform w projekcie MSTest

Zaleca się używanie zestawu MSTest SDK , ponieważ znacznie upraszcza konfigurację projektu i aktualizowanie projektu, a także zapewnia odpowiednie dopasowanie wersji platformy (Microsoft.Testing.Platform) i jej rozszerzeń.

Podczas korzystania z MSTest SDK domyślnie wybierasz platformę Microsoft.Testing.Platform.

<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ć uruchamiacz MSTest, dodając właściwość EnableMSTestRunner i ustawiając OutputType na Exe w pliku projektu. 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 projektu:

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

Wskazówka

Aby upewnić się, że wszystkie projekty testowe w rozwiązaniu używają runnera MSTest, ustaw właściwości EnableMSTestRunner i TestingPlatformDotnetTestSupport w pliku Directory.Build.props zamiast w pojedynczych plikach projektu.

Konfiguracje i filtry

.runsettings

Microsoft.Testing.Platform obsługuje runsettings za pomocą przełącznika --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