Übersicht über Microsoft.Testing.Platform
Microsoft.Testing.Platform ist eine einfache und portierbare Alternative zu VSTest zum Ausführen von Tests in allen Kontexten, darunter Continuous Integration-Pipelines (CI), Befehlszeilenschnittstelle, 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-Säulen
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 Laufzeit basiert nicht auf Spiegelung oder anderen dynamischen .NET-Laufzeitfeatures, um eine Testausführung zu koordinieren.
Laufzeittransparenz: Die Testlaufzeit stört den Testframeworkcode nicht, erstellt keine isolierten Kontexte wie
AppDomain
oderAssemblyLoadContext
, 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.dll
die 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 TUnit documentation
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, wie bei den meisten ausführbaren Dateien. Weitere Informationen zu den bekannten Exitcodes finden Sie unter Microsoft.Testing.Platform-Exitcodes.
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.
Verwenden Sie 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
sucht das Projekt automatisch im aktuellen Ordner.
dotnet run --project Contoso.MyTests
Weitere Informationen zu dotnet run
finden Sie unter Dotnet-Ausführung.
Verwenden Sie 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.
Verwenden Sie 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 sofort dem @-Zeichen ohne Leerzeichen zwischen dem @-Zeichen und dem Antwortdateinamen folgen.
Optionen in einer Antwortdatei werden so interpretiert, als wären sie an dieser Stelle in der Befehlszeile vorhanden. Jedes Argument in einer Antwortdatei muss mit der gleichen Zeile beginnen und enden. Sie können das umgekehrte Schrägstrichzeichen () nicht verwenden, um Linien zu verketten. Die Verwendung einer Antwortdatei hilft bei sehr langen Befehlen, die die Terminalgrenzwerte überschreiten können. Sie können eine Antwortdatei mit Inline-Befehlszeilenargumenten kombinieren. Zum Beispiel:
./TestExecutable.exe @"filter.rsp" --timeout 10s
wobei filter.rsp den folgenden Inhalt haben kann:
--filter "A very long filter"
Alternativ kann eine einzelne RSP-Datei verwendet werden, um sowohl Timeout als auch Filter wie folgt anzugeben:
./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 die integrierte Dateiprotokollierung, 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 sindTrace
,Debug
,Information
,Warning
,Error
oderCritical
.--exit-on-process-exit
Beenden Sie den Testprozess, wenn ein abhängiger Prozess beendet wird. PID muss angegeben werden.
--help
Gibt eine Beschreibung zur Verwendung des Befehls aus.
-ignore-exit-code
Ermöglicht, dass einige Exitcodes ungleich null ignoriert 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.:
- Zur Plattform.
- Zur Umgebung.
- Jeder registrierte Kommandozeilenanbieter, wie z. B.
name
,version
,description
undoptions
. - 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 Verzeichnis noch nicht vorhanden ist, 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 vonVisual Studio
undVisual Studio Code
Test-Explorer. - 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.