Freigeben über


Übersicht über den MSTest-Runner

Der MSTest Runner ist eine einfache und portierbare Alternative zu VSTest zum Ausführen von Tests in allen Kontexten (z. B. Continuous Integration-Pipelines (CI), CLI, Visual Studio-Test-Explorer und VS Code-Test-Explorer). Der MSTest Runner ist direkt in Ihre MSTest-Testprojekte eingebettet, und es sind keine anderen App-Abhängigkeiten wie vstest.console oder dotnet test erforderlich, um Ihre Tests auszuführen.

Der MSTest Runner ist Open Source und baut auf einer Microsoft.Testing.Platform-Bibliothek auf. Sie finden Microsoft.Testing.Platform-Code im Microsoft/testfx GitHub-Repository. Der MSTest Runner ist gebündelt mit MSTest in 3.2.0-preview.23623.1 oder einer neueren Version.

Aktivieren des MSTest-Runners in einem MSTest-Projekt

Es wird empfohlen, das MSTest SDK zu verwenden, da es die Projektkonfiguration und -aktualisierung erheblich vereinfacht und einen korrekten Abgleich der Versionen der Plattform (MSTest-Runner) und der zugehörigen Erweiterungen gewährleistet.

Wenn Sie MSTest SDK verwenden, ist der MSTest-Runner standardmäßig aktiviert.

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

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

</Project>

Alternativ können Sie MSTest-Runner aktivieren, indem Sie die EnableMSTestRunner-Eigenschaft hinzufügen und OutputType auf Exe in der Projektdatei festlegen. Außerdem müssen Sie sicherstellen, dass Sie MSTest 3.2.0-preview.23623.1 oder neuer verwenden.

Betrachten Sie die folgende Beispielprojektdatei:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- Enable the MSTest runner, this is an opt-in feature -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <OutputType>Exe</OutputType>

    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </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
    -->
    <PackageReference Include="MSTest" Version="3.2.0" />

    <!--
      Coverlet collector isn't compatible with MSTest runner, 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>

Tipp

Es wird empfohlen, die eigenschaft EnableMSTestRunner in Directory.Build.props Datei anstelle csproj Datei festzulegen, um sicherzustellen, dass alle Testprojekte in Ihrer Lösung den MSTest runner verwenden.

Konfigurationen und Filter

.runsettings

Der MSTest-Runner unterstützt runsettings über die Befehlszeilenoption --settings. Die vollständige Liste der unterstützten MSTest-Einträge finden Sie unter Konfigurieren von MSTest: Ausführungseinstellungen. Die folgenden Befehle zeigen verschiedene Verwendungsbeispiele.

Verwenden von dotnet run:

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

Verwenden 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 die Tests nahtlos mit der Befehlszeilenoption --filter. Die folgenden Befehle zeigen einige Beispiele.

Verwenden von dotnet run:

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

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