Ausführen von Tests mit MSTest

Tipp

Bevor Sie eine Runner-Konfiguration auswählen, lesen Sie Übersicht über Testplattformen.

MSTest-Tests können abhängig von Ihren Anforderungen auf verschiedene Arten ausgeführt werden. Sie können Tests über eine IDE (z. B. Visual Studio, Visual Studio Code oder JetBrains Rider) oder über die Befehlszeile oder über einen CI-Dienst (z. B. GitHub Actions oder Azure DevOps) ausführen.

In der Vergangenheit basiert MSTest auf VSTest für die Ausführung von Tests in allen Kontexten, aber ab Version 3.2.0 verfügt MSTest über einen eigenen Testläufer. Dieser neue Runner ist leichter und schneller als VSTest und die empfohlene Methode, um MSTest-Tests auszuführen.

VSTest vs MTP

MSTest unterstützt die Ausführung von Tests mit VSTest und Microsoft.Testing.Platform (MTP). Die Unterstützung für MTP wird von msTest runner unterstützt, die Tests in allen Kontexten (z. B. kontinuierliche Integration (CI) pipelines, CLI, Visual Studio Test Explorer und VS Code Text Explorer ausführen kann). Der MSTest-Runner ist direkt in Ihre MSTest-Testprojekte eingebettet, und es gibt keine anderen App-Abhängigkeiten, wie vstest.console oder dotnet test, die zum Ausführen Ihrer Tests erforderlich sind. Sie können Ihre Tests jedoch weiterhin mit dotnet test.

Der MSTest-Runner ist Open Source und baut auf der bibliothek MTP auf. Sie finden Microsoft.Testing.Platform Code im Repository microsoft/testfx GitHub. Der MSTest-Runner ist im Lieferumfang von MSTest in 3.2.0 oder neuer enthalten.

Aktivieren von MTP in einem MSTest-Projekt

Verwenden Sie MSTest SDK , um Ihre Projektkonfiguration, Versionsverwaltung und Ausrichtung von MTP und deren Erweiterungen erheblich zu vereinfachen.

MSTest.Sdk ersetzt Microsoft.NET.Sdk als Projekt-SDK, und MTP ist standardmäßig aktiviert:

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

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

</Project>

Note

MSTest.Sdk funktioniert nur, wenn Ihr Projekt Microsoft.NET.Sdk als Basis-SDK verwenden kann. Wenn Ihr project ein anderes SDK erfordert, ersetzen Sie den <Project Sdk="..."> Wert nicht durch MSTest.Sdk.

Beispielsweise verwenden einige ASP.NET Core-Integrationstestprojekte Microsoft.NET.Sdk.Web. MSTest.Sdk leitet sich von Microsoft.NET.Sdk ab, sodass es die ASP.NET Core SDK-Ziele nicht importiert, die von Microsoft.NET.Sdk.Web bereitgestellt werden.

Sie können MSTest auch manuell konfigurieren, anstatt MSTest.Sdk zu verwenden. Die manuelle Konfiguration ist erforderlich, wenn Ihr Projekt ein anderes SDK auf oberster Ebene benötigt (z. B Microsoft.NET.Sdk.Web. ), aber Sie können es auch mit dem Standard Microsoft.NET.Sdkauswählen. Fügen Sie die Eigenschaft EnableMSTestRunner hinzu, und legen Sie OutputType in Ihrer Projektdatei auf Exe fest. Fügen Sie dann die MSTest-Verweise hinzu, die für Ihr Projekt erforderlich sind. Stellen Sie sicher, dass Sie MSTest 3.2.0 oder höher verwenden und auf die neueste verfügbare MSTest-Version aktualisieren.

Betrachten Sie das folgende Beispiel project Datei:

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

Tipp

Um sicherzustellen, dass alle Testprojekte in Ihrer Lösung den MSTest-Runner verwenden, legen Sie die Eigenschaften EnableMSTestRunner und TestingPlatformDotnetTestSupport in Directory.Build.propsdatei anstelle einzelner project Dateien fest.

Konfigurationen und Filter

.runsettings

MTP unterstützt die Runsettings über die Befehlszeilenoption --settings. Die vollständige Liste der unterstützten MSTest-Einträge finden Sie unter Configure MSTest: Runsettings. Die folgenden Befehle zeigen verschiedene Verwendungsbeispiele.

Verwendung von dotnet run:

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

Verwendung von dotnet exec:

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

-oder-

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

Mit der ausführbaren Datei:

Contoso.MyTests.exe --settings config.runsettings

Testfilter

Sie können den Testfilter nahtlos mithilfe der Befehlszeilenoption --filterbereitstellen. Die folgenden Befehle zeigen einige Beispiele.

Verwendung von dotnet run:

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

Verwendung von dotnet exec:

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

-oder-

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

Mit der ausführbaren Datei:

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

Siehe auch