Auf Englisch lesen

Teilen über


Übersicht über Microsoft.Testing.Platform

Microsoft.Testing.Platform ist eine einfache und tragbare Alternative zu VSTest- für die Ausführung von Tests in allen Kontexten, einschließlich fortlaufender Integrationspipelinen, CLI, Visual Studio Test Explorer und VS Code Test Explorer. Microsoft.Testing.Platform ist direkt in Ihre Testprojekte eingebettet, und es sind keine anderen Apps wie vstest.console oder dotnet test erforderlich, um Ihre Tests auszuführen.

Microsoft.Testing.Platform ist Open Source. Sie finden Microsoft.Testing.Platform Code im microsoft/testfx GitHub-Repository.

Microsoft.Testing.Platform-Pfeiler

Diese neue Testplattform basiert auf der Erfahrung des .NET Developer Experience Testing-Teams und zielt darauf ab, die Herausforderungen zu beheben, die seit der Veröffentlichung von .NET Core im Jahr 2016 aufgetreten sind. Obwohl es ein hohes Maß an Kompatibilität zwischen .NET Framework und .NET Core/.NET gibt, haben einige wichtige Features wie das Plug-In-System und die neuen möglichen Formfaktoren von .NET-Kompilierungen es komplex gemacht, das neue Laufzeitfeature mit der aktuellen VSTest-Plattformarchitektur zu entwickeln oder vollständig zu unterstützen.

Die wichtigsten Faktoren für die Entwicklung der neuen Testplattform sind im Folgenden aufgeführt:

  • Determinismus: Sicherstellen, dass das Ausführen der gleichen Tests in verschiedenen Kontexten (lokal, CI) dasselbe Ergebnis erzeugt. Die neue Laufzeitumgebung basiert nicht auf Reflexion oder anderen dynamischen Funktionen der .NET-Laufzeitumgebung, um den Ablauf eines Tests zu koordinieren.

  • Laufzeittransparenz: Die Testlaufzeit stört den Testframeworkcode nicht, erstellt keine isolierten Kontexte wie AppDomain oder AssemblyLoadContext, und es verwendet keine Spiegelung oder benutzerdefinierte Assemblylöser.

  • Kompilierungszeitregistrierung von Erweiterungen: Erweiterungen, z. B. Testframeworks und In-of-Process-Erweiterungen, werden während der Kompilierungszeit registriert, um die Determinität zu gewährleisten und die Erkennung von Inkonsistenzen zu erleichtern.

  • Nullabhängigkeiten: Der Kern der Plattform ist eine einzelne .NET-Assembly, Microsoft.Testing.Platform.dlldie keine anderen Abhängigkeiten als die unterstützten Laufzeiten aufweist.

  • Hostbar: Die Testlaufzeit kann in jeder .NET-Anwendung gehostet werden. Während eine Konsolenanwendung häufig zum Ausführen von Tests verwendet wird, können Sie eine Testanwendung in jeder Art von .NET-Anwendung erstellen. Auf diese Weise können Sie Tests in speziellen Kontexten ausführen, z. B. Geräte oder Browser, bei denen es einschränkungen gibt.

  • Unterstützen Sie alle .NET-Formfaktoren: Unterstützen Sie aktuelle und zukünftige .NET-Formfaktoren, einschließlich Native AOT.

  • Performant: Finden Sie das richtige Gleichgewicht zwischen Features und Erweiterungspunkten, um zu vermeiden, dass die Laufzeit mit nicht grundlegendem Code aufgebläht wird. Die neue Testplattform dient dazu, einen Testlauf zu "koordinieren", anstatt Implementierungsdetails zur Vorgehensweise bereitzustellen.

  • Erweiterbar genug: Die neue Plattform basiert auf Erweiterbarkeitspunkten, um eine maximale Anpassung der Laufzeitausführung zu ermöglichen. Sie können den Testprozesshost konfigurieren, den Testprozess beobachten und Informationen aus dem Testframework innerhalb des Testhostprozesses nutzen.

  • Bereitstellung eines einzelnen Moduls: Das Hostierbarkeitsfeature ermöglicht ein einzelnes Modulbereitstellungsmodell, bei dem ein einziges Kompilierungsergebnis verwendet werden kann, um alle Erweiterbarkeitspunkte zu unterstützen, sowohl out-of-process als auch in-process, ohne dass verschiedene ausführbare Module ausgeliefert werden müssen.

Unterstützte Testframeworks

  • MSTest. In MSTest erfolgt die Unterstützung von Microsoft.Testing.Platform über MSTest Runner.
  • NUnit. In NUnit erfolgt die Unterstützung von Microsoft.Testing.Platform über NUnit-Runner.
  • xUnit.net: In xUnit.net erfolgt die Unterstützung von Microsoft.Testing.Platform über xUnit.net-Runner.
  • TUnit: vollständig konstruiert auf der Grundlage von Microsoft.Testing.Platform. Weitere Informationen finden Sie in der Dokumentation zu TUnit.

Ausführen und Debuggen von Tests

Microsoft.Testing.Platform--Testprojekte werden als ausführbare Dateien erstellt, die direkt ausgeführt (oder debuggt) werden können. Es gibt keine zusätzliche Testausführungskonsole und keinen zusätzlichen Befehl. Die App wird mit einem Nonzero-Exitcode beendet, wenn ein Fehler auftritt, der für die meisten ausführbaren Dateien typisch ist. Weitere Informationen zu den bekannten Exitcodes finden Sie unter Microsoft.Testing.Platform-Exitcodes.

Tipp

Mithilfe der Befehlszeilenoption --ignore-exit-code können Sie einen bestimmten Exitcode ignorieren.

Sie können auch Befehlszeilenoptionen festlegen, die für ein bestimmtes Testprojekt in der Projektdatei mit der TestingPlatformCommandLineArguments MSBuild-Eigenschaft gelten. Ein gängiger Anwendungsfall ist für Testprojekte mit ignorierten Tests, die normalerweise mit Exitcode 8 beendet werden (die Testsitzung hat null Tests ausgeführt). In diesem Szenario können Sie folgendes unter einer PropertyGroup in Ihrer Projektdatei hinzufügen:

<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>

Wichtig

Standardmäßig sammelt Microsoft.Testing.Platform Telemetrie. Weitere Informationen und Optionen zum Deaktivieren finden Sie unter Microsoft.Testing.Platform-Telemetrie.

Das Veröffentlichen des Testprojekts mithilfe von dotnet publish und das direkte Ausführen der App ist eine weitere Möglichkeit, Ihre Tests auszuführen. Führen Sie z. B. ./Contoso.MyTests.exe aus. In einigen Szenarien ist es auch praktikabel, dotnet build zur Erstellung der ausführbaren Datei zu verwenden, es kann jedoch auch Grenzfälle geben, z. B. Native AOT.

Verwende dotnet run

Der dotnet run-Befehl kann zum Erstellen und Ausführen des Testprojekts verwendet werden. Dies ist die einfachste, obwohl manchmal langsamste Möglichkeit, Ihre Tests auszuführen. Die Verwendung von dotnet run ist praktisch, wenn Sie Tests lokal bearbeiten und ausführen, da sichergestellt wird, dass das Testprojekt bei Bedarf neu erstellt wird. dotnet run wird das Projekt auch automatisch im aktuellen Ordner finden.

dotnet run --project Contoso.MyTests

Weitere Informationen zu dotnet run finden Sie unter dotnet run.

Verwende dotnet exec

Der dotnet exec- oder dotnet-Befehl wird verwendet, um ein bereits erstelltes Testprojekt auszuführen (oder zu nutzen). Dies ist eine Alternative zum direkten Ausführen der Anwendung. dotnet exec erfordert einen Pfad zur integrierten Testprojekt-DLL.

dotnet exec Contoso.MyTests.dll

oder

dotnet Contoso.MyTests.dll

Hinweis

Wenn Sie den Pfad zur ausführbaren Datei des Testprojekts (*.exe) angeben, tritt ein Fehler auf:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

Weitere Informationen zu dotnet exec finden Sie unter dotnet exec.

Verwende dotnet test

Microsoft.Testing.Platform bietet eine Kompatibilitätsschicht für vstest.console.exe und dotnet test und stellt so sicher, dass Sie Ihre Tests wie zuvor ausführen können, während gleichzeitig ein neues Ausführungsszenario aktiviert wird.

dotnet test Contoso.MyTests.dll

Optionen

In der nachfolgenden Liste werden nur die Plattformoptionen beschrieben. Um die spezifischen Optionen anzuzeigen, die von jeder Erweiterung bereitgestellt werden, verweisen Sie entweder auf die Dokumentationsseite der Erweiterung, oder verwenden Sie die Option --help.

  • @

    Gibt den Namen der Antwortdatei an. Der Name der Antwortdatei muss unmittelbar auf das @-Zeichen folgen, und es darf kein Leerzeichen zwischen dem @-Zeichen und dem Namen der Antwortdatei vorhanden sein.

    Optionen in einer Antwortdatei werden so interpretiert, als ob sie an dieser Stelle in der Befehlszeile vorhanden wären. Jedes Argument in einer Antwortdatei muss mit der gleichen Zeile beginnen und enden. Sie können einen umgekehrten Schrägstrich (\) nicht zum Verketten von Zeilen verwenden. Die Verwendung einer Antwortdatei ist bei sehr langen Befehlen hilfreich, die die Terminalgrenzen überschreiten können. Sie können eine Antwortdatei mit Inline-Befehlszeilenargumenten kombinieren. Beispiel:

    ./TestExecutable.exe @"filter.rsp" --timeout 10s
    

    wobei filter.rsp den folgenden Inhalt haben kann:

    --filter "A very long filter"
    

    Alternativ können Sie mit einer einzelnen RSP-Datei wie folgt sowohl Timeout als auch Filter angeben:

    ./TestExecutable.exe @"arguments.rsp"
    
    --filter "A very long filter"
    --timeout 10s
    
  • --config-file

    Gibt eine testconfig.json-Datei an.

  • --diagnostic

    Aktiviert die Diagnoseprotokollierung. Die Standardprotokollebene ist Trace. Die Datei wird im Ausgabeverzeichnis mit dem folgenden Namensformat geschrieben: log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

    Zwingt den integrierten Dateilogger, Protokolle synchron zu schreiben. Nützlich für Szenarien, in denen keine Protokolleinträge verloren gehen sollen (bei Prozessabsturz). Dadurch wird die Testausführung verlangsamt.

  • --diagnostic-output-directory

    Das Ausgabeverzeichnis der Diagnoseprotokollierung. Wird es nicht angegeben, wird die Datei im Standardverzeichnis TestResults generiert.

  • --diagnostic-output-fileprefix

    Das Präfix für den Namen der Protokolldatei. Wird standardmäßig auf "log_" festgelegt.

  • --diagnostic-verbosity

    Definiert den Ausführlichkeitsgrad, wenn die Option --diagnostic verwendet wird. Verfügbare Werte sind Trace, Debug, Information, Warning, Error oder Critical.

  • --exit-on-process-exit

    Beenden Sie den Testprozess, wenn ein abhängiger Prozess beendet wird. Die PID muss angegeben werden.

  • --help

    Gibt eine Beschreibung zur Verwendung des Befehls aus.

  • -ignore-exit-code

    Erlaubt, dass einige Nicht-Null-Exitcodes ignoriert werden und stattdessen als 0 zurückgegeben werden. Weitere Informationen finden Sie im Abschnitt Ignorieren spezifischer Exitcodes.

  • --info

    Zeigt erweiterte Informationen zur .NET-Testanwendung an, z. B.:

    • Die Plattform.
    • Zur Umgebung.
    • Jeder registrierte Kommandozeilenanbieter, wie z. B. name, version, description und options.
    • Jedes registrierte Tool, wie z. B. seine command, name, version, description und alle Kommandozeilen-Anbieter.

    Dieses Feature wird verwendet, um Erweiterungen zu verstehen, die dieselbe Befehlszeilenoption registrieren, oder um die Änderungen bei den verfügbaren Optionen zwischen mehreren Versionen einer Erweiterung (oder der Plattform) zu ermitteln.

  • --list-tests

    Auflisten verfügbarer Tests. Tests werden nicht ausgeführt.

  • --maximum-failed-tests

    Gibt die maximale Anzahl von Testfehlern an, bei deren Erreichen der Testlauf abgebrochen wird. Zur Unterstützung dieses Schalters müssen die Autoren des Frameworks die Funktionalität IGracefulStopTestExecutionCapability implementieren. Der Exit-Code bei Erreichen dieser Anzahl von Testfehlern ist 13. Weitere Informationen finden Sie unter Microsoft.Testing.Platform Exit-Codes.

    Hinweis

    Dieses Feature ist ab Version 1.5 in Microsoft.Testing.Platform verfügbar.

  • --minimum-expected-tests

    Gibt die Mindestanzahl der auszuführenden Tests an. Standardmäßig wird davon ausgegangen, dass mindestens ein Test ausgeführt wird.

  • --results-directory

    Das Verzeichnis, in dem die Testergebnisse gespeichert werden. Wenn das angegebene Verzeichnis noch nicht existiert, wird es erstellt. Der Standardwert ist TestResults im Verzeichnis, das die Testanwendung enthält.

  • --timeout

    Eine globale Zeitüberschreitung für die Testausführung. Nimmt ein Argument als Zeichenfolge im Format <value>[h|m|s] an, wobei <value> ein Float ist.

MSBuild-Integration

The NuGet package Microsoft.Testing.Platform.MSBuild bietet verschiedene Integrationen für Microsoft.Testing.Platform mit MSBuild:

  • Unterstützung für dotnet test Weitere Informationen finden Sie unter Integration von „dotnet test”.
  • Unterstützung für ProjectCapability erforderlich für die Test-Explorer Visual Studio und Visual Studio Code.
  • Automatische Generierung des Einstiegspunkts (Main-Methode).
  • Automatische Generierung der Konfigurationsdatei.

Hinweis

Diese Integration funktioniert transitiv (ein Projekt, das auf ein anderes Projekt verweist, das auf dieses Paket verweist, verhält sich so, als ob es auf das Paket verweist) und kann über die IsTestingPlatformApplication-MSBuild-Eigenschaft deaktiviert werden.

Siehe auch


Zusätzliche Ressourcen

Dokumentation