Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel bietet Einblicke in den dotnet test CLI-Befehl, einschließlich seiner historischen Kompatibilität mit VSTest und Microsoft.Testing.Platform (MTP).
Der dotnet test Befehl wird in zwei primären Modi ausgeführt:
-
VSTestModus: Dies ist der Standardmodus für
dotnet testund war der einzige Modus, der vor dem .NET 10 SDK verfügbar war. Sie ist in erster Linie für VSTest konzipiert, kann aber auch Microsoft.Testing.Platform-Tests über das Microsoft.Testing.Platform.MSBuild-NuGet-Paket ausführen. - Microsoft.Testing.Platform-Modus: Mit dem .NET 10 SDK eingeführt, unterstützt dieser Modus ausschließlich Testanwendungen, die mit Microsoft.Testing.Platform erstellt wurden.
Tipp
Informationen zur CLI-Referenz finden Sie unter dotnet test.
VSTest-Modus von dotnet test
Seit langem war VSTest die einzige Testplattform in .NET. Daher wurde dotnet test ausschließlich für VSTest entwickelt, wobei alle Befehlszeilenoptionen auf VSTest zugeschnitten sind.
Der Prozess umfasst das Aufrufen des VSTest MSBuild-Ziels, das andere interne Ziele zur Ausführung auslöst und letztendlich vstest.console ausführt. Alle dotnet test Befehlszeilenoptionen werden in "vstest.console" in ihre Entsprechungen übersetzt.
Ausführen von MTP-Projekten mit VSTest-Modus
dotnet test wurde entwickelt, um VSTest-Projekte im VSTest-Modus auszuführen. Sie können MTP-Projekte jedoch im dotnet test VSTest-Modus mit dem Microsoft ausführen. Testing.Platform.MSBuild-Paket. Aus Sicht des Benutzers wird diese Unterstützung aktiviert, indem die TestingPlatformDotnetTestSupport MSBuild-Eigenschaft auf true ( false aus Gründen der Abwärtskompatibilität standardmäßig) festgelegt wird. Wenn diese Eigenschaft auf true festgelegt ist, ändert Microsoft.Testing.Platform.MSBuild das VSTest-Zielverhalten und leitet es um, um InvokeTestingPlatform aufzurufen.
InvokeTestingPlatform ist ein MSBuild-Ziel, das in Microsoft.Testing.Platform.MSBuild enthalten ist und für die ordnungsgemäße Ausführung von MTP-Tests als ausführbare Dateien verantwortlich ist. VSTest-spezifische Befehlszeilenoptionen wie --loggerwerden in diesem Modus stillschweigend ignoriert. Um MTP-spezifische Argumente wie --report-trxeinzufügen, müssen Sie diese nach einem zusätzlichen --anhängen. Beispiel: dotnet test -- --report-trx. In MTP 1.9 wird eine Warnung mit Code MTP0001 erzeugt, wenn ein Argument erkannt wird, das im Hintergrund ignoriert wird.
Hinweis
MSTest und NUnit verwenden die Microsoft. Testing.Extensions.VSTestBridge-Paket. Durch das Festlegen von EnableMSTestRunner oder EnableNUnitRunner (wodurch Microsoft.Testing.Platform aktiviert wird) unterstützt Ihr Testprojekt sowohl VSTest als auch Microsoft.Testing.Platform.
Wenn Sie in diesem Szenario den VSTest-Modus dotnet test verwenden und TestingPlatformDotnetTestSupport nicht auf "true" festgelegt ist, läuft im Wesentlichen alles vollständig mit VSTest, als ob EnableMSTestRunner und EnableNUnitRunner nicht auf "true" festgelegt sind.
Hinweis
Es wird dringend empfohlen, die TestingPlatformDotnetTestSupport Eigenschaft in Directory.Build.propsfestzulegen. Dadurch wird sichergestellt, dass Sie sie nicht einzeln zu jeder Testprojektdatei hinzufügen müssen. Darüber hinaus verhindert es das Risiko, ein neues Testprojekt einzuführen, das diese Eigenschaft nicht festlegt, was zu einer Lösung führen kann, bei der einige Projekte VSTest verwenden, während andere Microsoft verwenden. Testing.Platform. Diese gemischte Konfiguration funktioniert möglicherweise nicht ordnungsgemäß und ist ein nicht unterstütztes Szenario.
Wichtig
Das Ausführen von MTP-Projekten im VSTest-Modus gilt als veraltet zugunsten der neueren Erfahrung im .NET 10 SDK. Die Unterstützung für die Ausführung in diesem Modus wird in Microsoft.Testing.Platform Version 2 entfernt, wenn das .NET 10 SDK verwendet wird. Die Unterstützung bleibt aus Gründen der Abwärtskompatibilität für .NET 9 SDK und früher verfügbar.
Weitere Informationen finden Sie unter Migrieren zum MTP-Modus von dotnet test.
In der folgenden Liste werden die Befehlszeilenoptionen der dotnet test Befehle im VSTest-Modus beschrieben, die von Microsoft.Testing.Platform unterstützt werden. Diese Optionen sind spezifisch für den Buildprozess und werden nicht an VSTest übergeben, weshalb sie mit MTP arbeiten.
-a|--arch <ARCHITECTURE>--artifacts-path <ARTIFACTS_DIR>-c|--configuration <CONFIGURATION>-f|--framework <FRAMEWORK>-e|--environment <NAME="VALUE">--interactive--no-build--nologo--no-restore-o|--output <OUTPUT_DIRECTORY>--os <OS>-r|--runtime <RUNTIME_IDENTIFIER>-v|--verbosity <LEVEL>
Tipp
Sie können die Befehlszeilenargumente Ihrer Testanwendung über die MSBuild property anpassen:
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
Fehler pro Test anzeigen
Standardmäßig werden Testfehler in einer LOG-Datei zusammengefasst, und pro Testprojekt wird ein einzelner Fehler an MSBuild gemeldet.
Wenn Sie Fehler pro fehlgeschlagenem Test anzeigen möchten, geben Sie in der Befehlszeile -p:TestingPlatformShowTestsFailure=true an, oder fügen Sie Ihrer Projektdatei die <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>-Eigenschaft hinzu.
Auf der Kommandozeile:
dotnet test -p:TestingPlatformShowTestsFailure=true
Vollständige Plattformausgabe anzeigen
Standardmäßig wird die gesamte Konsolenausgabe, welche die zugrunde liegende ausführbare Testdatei schreibt, vom Benutzer erfasst und ausgeblendet. Dazu gehören Banner, Versionsinformationen und formatierte Testinformationen.
Um diese Informationen zusammen mit der MSBuild-Ausgabe anzuzeigen, verwenden Sie <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.
Diese Option wirkt sich nicht darauf aus, wie das Testframework die Benutzerausgabe erfasst, die von Console.WriteLine oder auf andere ähnliche Arten in die Konsole ausgegeben wird.
Auf der Kommandozeile:
dotnet test -p:TestingPlatformCaptureOutput=false
Erweiterte technische Details
Im dotnet test VSTest-Modus wird dies -- verwendet, um die RunSettings-Argumente anzugeben. Ursprünglich wurde dotnet test entwickelt, um diese Argumente als eine MSBuild-Eigenschaft an VSTestCLIRunSettings zu übergeben. Daher verwenden wir den Wert von VSTestCLIRunSettings beim Ausführen von MTP-Testanwendungen im VSTest-Modus, um "Anwendungsargumente" darzustellen.
Mischen von VSTest und Microsoft. Testing.Platform (MTP)
Beim Ausführen von dotnet test im VSTest-Modus wird empfohlen, zu vermeiden, sowohl VSTest als auch Microsoft.Testing.Platform in derselben Lösung einzuschließen.
Dieses Szenario wird nicht offiziell unterstützt, und Sie sollten folgendes beachten:
- VSTest-spezifische Befehlszeilenoptionen gelten nur für VSTest-Projekte und nicht für MTP-Testanwendungen.
- MTP-spezifische Befehlszeilenoptionen, die nach
--angegeben werden, werden als RunSettings-Argumente für VSTest-Projekte behandelt.
Wichtige Erkenntnisse
- Um MTP-Testanwendungen im
dotnet testVSTest-Modus auszuführen, sollten SieMicrosoft.Testing.Platform.MSBuildverwenden, MTP-spezifische Befehlszeilenoptionen nach dem zusätzlichen--übergeben undTestingPlatformDotnetTestSupportauftruefestlegen. - VSTest-orientierte Befehlszeilenoptionen werden im Hintergrund ignoriert.
Aufgrund dieser Probleme hat .NET einen neuen dotnet test Modus eingeführt, der speziell für MTP entwickelt wurde. Wir empfehlen MTP-Benutzern, vom VSTest-dotnet test-Modus zum neuen Modus mit dem .NET 10 SDK zu wechseln.
Microsoft.Testing.Platform (MTP)-Modus von dotnet test
Um die Probleme zu beheben, die beim Ausführen von dotnet test mit MTP im VSTest-Modus auftreten, hat .NET einen neuen Modus im .NET 10 SDK eingeführt, der speziell für MTP entwickelt wurde.
Um diesen Modus zu aktivieren, fügen Sie ihrer Datei die folgende Konfiguration hinzu global.json :
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Wichtig
Die dotnet test-Erlebnis für MTP wird nur in Microsoft.Testing.Platform Version 1.7 und höher unterstützt.
Da dieser Modus speziell für die Microsoft.Testing.Platform entwickelt wurde, sind weder TestingPlatformDotnetTestSupport noch die zusätzlichen -- erforderlich.
Wichtig
Dieser Modus ist nur mit Microsoft.Testing.Platform Version 1.7.0 und höher kompatibel.
Wichtig
Wenn Ihr Testprojekt VSTest unterstützt, aber MTP nicht unterstützt, wird ein Fehler generiert.
Tipp
Sie können die Befehlszeilenargumente Ihrer Testanwendung über die MSBuild property anpassen:
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
Migrieren zum MTP-Modus von dotnet test
Für Benutzer von MTP, die den VSTest-Modus dotnet testverwenden, sind einige Aktionen erforderlich, um zur neueren dotnet test Oberfläche zu migrieren:
- Fügen Sie, wie oben gezeigt, einen Abschnitt zu Ihrer
test-Datei hinzu. - Entfernen Sie
TestingPlatformDotnetTestSupportdie MSBuild-Eigenschaft, da sie nicht mehr erforderlich ist. - Entfernen Sie die MSBuild-Eigenschaften
TestingPlatformCaptureOutputundTestingPlatformShowTestsFailure, da sie nicht mehr vom neuendotnet testverwendet werden. - Entfernen Sie das zusätzliche
--, z. B. solltedotnet test -- --report-trxzudotnet test --report-trxwerden. - Wenn Sie eine bestimmte Lösung (oder ein Verzeichnis mit Lösung) übergeben, sollte dies zu
dotnet test MySolution.slnwerden.dotnet test --solution MySolution.sln - Wenn Sie ein bestimmtes Projekt (oder ein Verzeichnis, das ein Projekt enthält) übergeben, z. B.
dotnet test MyProject.csproj, sollte dies zudotnet test --project MyProject.csprojwerden. - Wenn Sie beispielsweise eine bestimmte dll übergeben, sollte dies zu
dotnet test path/to/UnitTests.dllwerden. Beachten Sie, dass--test-modulesauch Globbing unterstützt.