Udostępnij za pośrednictwem


Wsparcie dla Microsoft.Testing.Platform w narzędziu MSTest (MSTest)

MSTest obsługuje uruchamianie testów zarówno z VSTest, jak i Microsoft.Testing.Platform (MTP). Obsługa protokołu MTP jest zapewniana przez framework MSTest, który może uruchamiać testy we wszystkich kontekstach (na przykład w potokach ciągłej integracji, interfejsie wiersza polecenia, Eksploratorze testów programu Visual Studio i Eksploratorze 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 dotnet test.

Moduł uruchamiający MSTest jest oprogramowaniem open source i opiera się na bibliotece Microsoft.Testing.Platform. 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łącz 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ń.

Jeśli używasz MSTest SDK, domyślnie wyrażasz zgodę na korzystanie z witryny Microsoft.Testing.Platform.

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

  <PropertyGroup>
    <TargetFramework>net8.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 projektu. Należy również upewnić się, że używasz MSTest 3.2.0 lub nowszych. 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>net8.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="3.8.0" />

    <!--
      Coverlet collector isn't compatible with Microsoft.Testing.Platform, you can
      either switch to Microsoft CodeCoverage (as shown below),
      or switch to be using coverlet global tool
      https://github.com/coverlet-coverage/coverlet#net-global-tool-guide-suffers-from-possible-known-issue
    -->
    <PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage"
                      Version="17.10.1" />
  </ItemGroup>

</Project>

Napiwek

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

Konfiguracje i filtry

.runsettings

Platforma Microsoft.Testing.Platform obsługuje runsettings za pośrednictwem opcji wiersza polecenia --settings. Pełną listę obsługiwanych wpisów MSTest można znaleźć w Konfigurowanie MSTest: Runsettings. Poniższe polecenia pokazują różne przykłady użycia.

Korzystanie z dotnet run:

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

Korzystanie z 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żesz filtr testów bezproblemowo ustawić używając opcji --filter wiersza polecenia. W poniższych poleceniach przedstawiono kilka przykładów.

Korzystanie z dotnet run:

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

Korzystanie z 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"