Freigeben über


Testen mit 'dotnet test'

Dieser Artikel enthält Einblicke in den dotnet test CLI-Befehl, einschließlich seiner Verlaufskompatibilität mit VSTest und Microsoft.Testing.Platform (MTP).

Der dotnet test Befehl wird in zwei primären Modi ausgeführt:

  • VSTest-Modus : Dies ist der Standardmodus für dotnet test und war der einzige Modus, der vor dem .NET 10 SDK verfügbar war. Es wurde hauptsächlich für VSTest entwickelt, kann aber auch microsoft.Testing.Platform Test ü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 langer Zeit 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 jedoch MTP-Projekte im dotnet test VSTest-Modus mithilfe des Microsoft.Testing.Platform.MSBuild-Pakets ausführen. 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 truegesetzt ist, ändert Microsoft.Testing.Platform.MSBuild das Verhalten des Ziels VSTest und leitet es zum Aufruf von InvokeTestingPlatformum. InvokeTestingPlatform ist ein MSBuild-Ziel, das in Microsoft.Testing.Platform.MSBuild enthalten ist, das für die ordnungsgemäße Ausführung von MTP-Testanwendungen 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.

Hinweis

MSTest und NUnit verwenden das Paket "Microsoft.Testing.Extensions.VSTestBridge ". 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.Testing.Platform verwenden. Diese gemischte Konfiguration funktioniert möglicherweise nicht ordnungsgemäß und ist ein nicht unterstütztes Szenario.

In der folgenden Liste werden die Befehlszeilenoptionen des dotnet test Befehls 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>

Weitere Informationen zum Ausführen von MTP-Projekten im VSTest-Modus von dotnet testfinden Sie unter Verwenden Sie Microsoft.Testing.Platform mit dem VSTest-Modus von dotnet test.

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)

Bei der Ausführung von dotnet test im VSTest-Modus wird empfohlen, nicht sowohl VSTest als auch Microsoft.Testing.Platform in derselben Lösung zu verwenden.

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 test-VSTest-Modus auszuführen, sollten Sie Microsoft.Testing.Platform.MSBuild verwenden, MTP-spezifische Befehlszeilenoptionen nach dem zusätzlichen -- übergeben und TestingPlatformDotnetTestSupport auf true setzen.
  • 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-Modus dotnet test 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 dotnet test von 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 dem Stammverzeichnis des Repositorys oder der Lösung eine dotnet.config Datei hinzu.

[dotnet.test.runner]
name = "Microsoft.Testing.Platform"

Wichtig

Die dotnet test-Oberfläche für MTP wird nur in Microsoft.Testing.Platform Version 1.7 und höher unterstützt.

Da dieser Modus speziell für 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>