Confronto tra Microsoft.Testing.Platform e VSTest
Microsoft.Testing.Platform
è un'alternativa semplice e portabile a VSTest per l'esecuzione di test nella riga di comando, nelle pipeline di integrazione continua (CI), in Esplora test di Visual Studio e in Visual Studio Code. In questo articolo vengono illustrate le differenze principali tra lo strumento di esecuzione MSTest e VSTest.
Differenze nell'esecuzione dei test
I test vengono eseguiti in modi diversi a seconda dello strumento di esecuzione.
Eseguire test VSTest
VSTest viene fornito con Visual Studio, .NET SDK e come strumento autonomo nel pacchetto NuGet Microsoft.TestPlatform. VSTest usa un eseguibile dello strumento di esecuzione per eseguire test, denominati vstest.console.exe
, che possono essere usati direttamente o tramite dotnet test
.
Eseguire test Microsoft.Testing.Platform
Microsoft.Testing.Platform è incorporato direttamente nel progetto di test e non fornisce alcun file eseguibile aggiuntivo. Quando si esegue il file eseguibile del progetto, i test vengono eseguiti. Per maggiori informazioni sull'esecuzione di test Microsoft.Testing.Platform, consultare la sezione Panoramica di Microsoft.Testing.Platform: Esecuzione e test di debug.
Spazi dei nomi e pacchetti NuGet
Per acquisire familiarità con Microsoft.Testing.Platform
e VSTest, è utile comprendere gli spazi dei nomi e i pacchetti NuGet usati da ognuno.
Spazi dei nomi VSTest
VSTest è una raccolta di strumenti di test noti anche come Piattaforma di test. Il codice sorgente VSTest è open source e disponibile nel repository GitHub microsoft/vstest. Il codice usa lo spazio dei nomi Microsoft.TestPlatform.*
.
VSTest è estendibile e i tipi comuni vengono inseriti nel pacchetto NuGet Microsoft.TestPlatform.ObjectModel.
Spazi dei nomi Microsoft.Testing.Platform
Microsoft.Testing.Platform si basa sul pacchetto NuGet Microsoft.Testing.Platform e su altre librerie nello spazio dei nomi Microsoft.Testing.*
. Come VSTest, Microsoft.Testing.Platform
è open source e ha un repository GitHub microsoft/testfx.
Protocollo di comunicazione (anteprima)
Nota
Esplora test di Visual Studio supporta il protocollo Microsoft.Testing.Platform nelle versioni di anteprima dalla versione 17.10 in avanti. Se si eseguono o si esegue il debug dei test usando versioni precedenti di Visual Studio, Esplora test userà vstest.console.exe
e il protocollo precedente per eseguire questi test.
Microsoft.Testing.Platform usa un protocollo basato su JSON-RPC per comunicare tra Visual Studio e il processo di test runner. Il protocollo è documentato nel repository MSTest GitHub.
VSTest usa anche un protocollo di comunicazione basato su JSON, ma non è basato su JSON RPC.
Disabilitazione del nuovo protocollo
Per disabilitare l'uso del nuovo protocollo in Esplora test, è possibile modificare il progetto per aggiungere la proprietà seguente: <DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
.
Eseguibili
VSTest include più eseguibili, in particolare vstest.console.exe
, testhost.exe
e datacollector.exe
. Tuttavia, MSTest è incorporato direttamente nel progetto di test e non include altri file eseguibili. L'eseguibile in cui viene compilato il progetto di test viene usato per ospitare tutti gli strumenti di test ed eseguire tutte le attività necessarie per eseguire i test.
Migrazione da VSTest
Oltre ai passaggi specifici del framework di test, è necessario aggiornare l'infrastruttura di test per adattarla a Microsoft.Testing.Platform
.
dotnet test
Le opzioni della riga di comando di dotnet test
sono suddivise in 2 categorie: argomenti correlati alla compilazione e test correlati.
Gli argomenti correlati alla compilazione vengono passati al comando dotnet build
e, di conseguenza, non è necessario aggiornarli per la nuova piattaforma. Di seguito sono elencati i temi correlati al build:
-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>
Gli argomenti correlati al test sono specifici di VSTest e quindi devono essere trasformati in modo che corrispondano alla nuova piattaforma. La tabella seguente illustra il mapping tra gli argomenti VSTest e la nuova piattaforma:
Argomento VSTest | Nuovo argomento della piattaforma |
---|---|
--test-adapter-path <ADAPTER_PATH> |
Non supportato |
--blame |
Non supportato |
--blame-crash |
--crashdump richiede estensione dump della memoria di arresto anomalo |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type richiede estensione dump della memoria di arresto anomalo |
--blame-crash-collect-always |
Non supportato |
--blame-hang |
--hangdump richiede 'estensione hang dump |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type richiede 'estensione hang dump |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout richiede 'estensione hang dump |
--collect <DATA_COLLECTOR_NAME> |
Dipende dall'agente di raccolta dati |
-d\|--diag <LOG_FILE> |
--diagnostic |
--filter <EXPRESSION> |
Dipende dal framework di test selezionato |
-l\|--logger <LOGGER> |
Dipende dal logger |
--results-directory <RESULTS_DIR> |
--results-directory <RESULTS_DIR> |
-s\|--settings <SETTINGS_FILE> |
Dipende dal framework di test selezionato |
-t\|--list-tests |
--list-tests |
-- <RunSettings arguments> |
Non supportato |
Importante
Prima di specificare qualsiasi argomento Microsoft.Testing.Platform
, è necessario aggiungere --
per separare gli argomenti dotnet test
dai nuovi argomenti della piattaforma. Ad esempio, dotnet test --no-build -- --list-tests
.
vstest.console.exe
Se si usa direttamente vstest.console.exe
, è consigliabile sostituirlo con il comando dotnet test
.
Esploratore di test
Quando si usa Visual Studio o Esplora test di Visual Studio Code, potrebbe essere necessario abilitare il supporto per la nuova piattaforma di test.
Visual Studio
Esplora test di Visual Studio supporta la nuova piattaforma di test a partire dalla versione 17.14. Se si usa una versione precedente, potrebbe essere necessario aggiornare Visual Studio alla versione più recente.
Visual Studio Code
Visual Studio Code Test Explorer supporta la nuova piattaforma di test a partire dalla versione X.
Azure DevOps
Quando si usano le attività di Azure DevOps, potrebbe essere necessario aggiornare la pipeline per usare la nuova piattaforma di test.
Attività VSTest
Se si usa l'attività VSTest in Azure DevOps, è possibile sostituirla con l'attività .NET Core.
Attività .NET Core
Se si usa l'attività .NET Core, non sono necessarie modifiche.