Condividi tramite


Prova con il comando 'dotnet test'

Questo articolo fornisce approfondimenti sul comando CLI dotnet test, inclusa la storia della compatibilità con VSTest e Microsoft.Testing.Platform (MTP).

Il dotnet test comando funziona in due modalità principali:

  • Modalità VSTest: questa è la modalità predefinita per dotnet test ed era l'unica modalità disponibile prima di .NET 10 SDK. È progettato principalmente per VSTest, ma può anche eseguire test Microsoft.Testing.Platform tramite il pacchetto NuGet Microsoft.Testing.Platform.MSBuild .
  • Modalità Microsoft.Testing.Platform : introdotta con .NET 10 SDK, questa modalità supporta esclusivamente le applicazioni di test compilate con Microsoft.Testing.Platform.

Suggerimento

Per riferimento della riga di comando, vedere dotnet test.

Modalità VSTest di dotnet test

Per molto tempo, VSTest era l'unica piattaforma di test in .NET. Di conseguenza, dotnet test è stato progettato esclusivamente per VSTest, con tutte le opzioni della riga di comando personalizzate per VSTest.

Il processo comporta la chiamata della VSTest destinazione MSBuild, che attiva l'esecuzione di altre destinazioni interne e infine esegue vstest.console. Tutte le dotnet test opzioni della riga di comando vengono convertite negli equivalenti in vstest.console.

Eseguire progetti MTP con la modalità VSTest

dotnet test è stato progettato per eseguire progetti VSTest in modalità VSTest. Tuttavia, è possibile eseguire progetti MTP in dotnet test modalità VSTest usando il pacchetto Microsoft.Testing.Platform.MSBuild . Dal punto di vista dell'utente, questo supporto è abilitato impostando la TestingPlatformDotnetTestSupport proprietà MSBuild su true (per false impostazione predefinita per motivi di compatibilità con le versioni precedenti). Quando questa proprietà è impostata su true, Microsoft.Testing.Platform.MSBuild modifica il VSTest comportamento di destinazione, reindirizzandolo per chiamare InvokeTestingPlatform. InvokeTestingPlatform è una destinazione MSBuild inclusa in Microsoft.Testing.Platform.MSBuild responsabile dell'esecuzione corretta di applicazioni di test MTP come eseguibili. Le opzioni della riga di comando specifiche di VSTest, ad esempio --logger, vengono ignorate automaticamente in questa modalità. Per includere argomenti specifici di MTP, ad esempio --report-trx, è necessario aggiungerli dopo un altro --oggetto . Ad esempio: dotnet test -- --report-trx. In MTP 1.9 viene generato un avviso con codice MTP0001 quando viene rilevato un argomento ignorato automaticamente.

Annotazioni

MSTest e NUnit usano il pacchetto Microsoft.Testing.Extensions.VSTestBridge . Impostando EnableMSTestRunner o EnableNUnitRunner (che abilita Microsoft.Testing.Platform), il progetto di test supporterà sia VSTest che Microsoft.Testing.Platform. In questo scenario, se si usa la modalità VSTest di dotnet test e non si imposta TestingPlatformDotnetTestSupport su true, si esegue essenzialmente interamente con VSTest, come se EnableMSTestRunner e EnableNUnitRunner non fosse impostato su true.

Annotazioni

È consigliabile impostare la TestingPlatformDotnetTestSupport proprietà in Directory.Build.props. In questo modo non è necessario aggiungerlo singolarmente a ogni file di progetto di test. Inoltre, impedisce il rischio di introdurre un nuovo progetto di test che non imposta questa proprietà, che potrebbe comportare una soluzione in cui alcuni progetti usano VSTest mentre altri usano Microsoft.Testing.Platform. Questa configurazione mista potrebbe non funzionare correttamente ed è uno scenario non supportato.

Importante

L'esecuzione di progetti MTP in modalità VSTest è considerata legacy a favore dell'esperienza più recente in .NET 10 SDK. Il supporto dell'esecuzione in questa modalità verrà rimosso in Microsoft.Testing.Platform versione 2 se eseguito con .NET 10 SDK. Il supporto rimane disponibile per .NET 9 SDK e versioni precedenti per la compatibilità con le versioni precedenti. Per altre informazioni, vedere Eseguire la migrazione alla modalità MTP di dotnet test.

L'elenco seguente illustra le opzioni della riga di comando del dotnet test comando in modalità VSTest supportate da Microsoft.Testing.Platform. Queste opzioni sono specifiche del processo di compilazione e non vengono passate a VSTest, motivo per cui funzionano con MTP.

  • -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>

Suggerimento

È possibile personalizzare gli argomenti della riga di comando dell'applicazione di test tramite TestingPlatformCommandLineArguments la proprietà MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Per altre informazioni specifiche per l'esecuzione di progetti MTP in modalità VSTest di dotnet test, vedere Usare Microsoft.Testing.Platform con la modalità VSTest di dotnet test.

Dettagli tecnici avanzati

In dotnet test la modalità VSTest, il -- viene utilizzato per indicare gli argomenti RunSettings. Originariamente, dotnet test è stato progettato per passare tali argomenti come proprietà MSBuild denominata VSTestCLIRunSettings. Pertanto, quando si eseguono applicazioni di test MTP in modalità VSTest, viene riutilizzato il valore di VSTestCLIRunSettings per rappresentare gli "argomenti dell'applicazione".

Combinazione di VSTest e Microsoft.Testing.Platform (MTP)

Quando si esegue dotnet test in modalità VSTest, è consigliabile evitare di includere sia VSTest che Microsoft.Testing.Platform nella stessa soluzione.

Questo scenario non è ufficialmente supportato ed è necessario tenere presente quanto segue:

  • Le opzioni della riga di comando specifiche di VSTest si applicano solo ai progetti VSTest e non alle applicazioni di test MTP.
  • Le opzioni della riga di comando specifiche di MTP fornite dopo -- verranno considerate come argomenti RunSettings per i progetti VSTest.

Punti chiave

  • Per eseguire applicazioni di test MTP in dotnet test modalità VSTest, è necessario usare Microsoft.Testing.Platform.MSBuild, passare le opzioni della riga di comando specifiche di MTP dopo l'extra --e impostare su TestingPlatformDotnetTestSupporttrue.
  • Le opzioni della riga di comando orientate a VSTest vengono ignorate automaticamente.

A causa di questi problemi, .NET ha introdotto una nuova dotnet test modalità progettata specificamente per MTP. Si consiglia agli utenti MTP di passare dalla modalità VSTest dotnet test alla nuova modalità con .NET 10 SDK.

Modalità di Microsoft.Testing.Platform (MTP) dotnet test

Per risolvere i problemi riscontrati durante l'esecuzione dotnet test con MTP in modalità VSTest, .NET ha introdotto una nuova modalità in .NET 10 SDK progettata specificamente per MTP.

Per abilitare questa modalità, aggiungere la configurazione seguente al global.json file:

{
    "test": {
        "runner": "Microsoft.Testing.Platform"
    }
}

Importante

L'esperienza dotnet test per MTP è supportata solo nella Microsoft.Testing.Platform versione 1.7 e successive.

Poiché questa modalità è progettata specificamente per Microsoft.Testing.Platform, non sono richiesti né TestingPlatformDotnetTestSupport-- aggiuntivi.

Importante

Questa modalità è compatibile solo con Microsoft.Testing.Platform versione 1.7.0 e successive.

Importante

Se il progetto di test supporta VSTest ma non supporta MTP, verrà generato un errore.

Suggerimento

È possibile personalizzare gli argomenti della riga di comando dell'applicazione di test tramite TestingPlatformCommandLineArguments la proprietà MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Eseguire la migrazione alla modalità MTP di dotnet test

Per gli utenti di MTP che usano la modalità VSTest di dotnet test, sono necessarie alcune azioni per eseguire la migrazione all'esperienza più recente dotnet test :

  1. Aggiungi la sezione test al file global.json, come illustrato in precedenza.
  2. Rimuovere la TestingPlatformDotnetTestSupport proprietà MSBuild, perché non è più necessaria.
  3. Rimuovere le proprietà TestingPlatformCaptureOutput e TestingPlatformShowTestsFailure di MSBuild, perché non vengono più usate dal nuovo dotnet test.
  4. Rimuovere l'elemento aggiuntivo --, ad esempio dotnet test -- --report-trx dovrebbe diventare dotnet test --report-trx.
  5. Se si passa una soluzione specifica (o una directory contenente la soluzione), ad esempio , dotnet test MySolution.slnquesto deve diventare dotnet test --solution MySolution.sln.
  6. Se si passa un progetto specifico (o una directory contenente il progetto), ad esempio , dotnet test MyProject.csprojquesto deve diventare dotnet test --project MyProject.csproj.
  7. Se si passa una DLL specifica, ad esempio , dotnet test path/to/UnitTests.dllquesto deve diventare dotnet test --test-modules path/to/UnitTests.dll. Si noti che --test-modules supporta anche il globbing.