Dela via


Migrera från VSTest till Microsoft.Testing.Platform

I den här artikeln får du lära dig hur du migrerar från VSTest till Microsoft.Testing.Platform.

Anmäl dig för att använda Microsoft.Testing.Platform

Det första steget i migreringen är att välja att använda Microsoft.Testing.Platform.

För alla testramverk lägger du till <OutputType>Exe</OutputType> i alla testprojekt i lösningen. Därefter följer du den ramverksspecifika vägledningen.

MSTest

Microsoft.Testing.Platform stöds av MSTest från och med 3.2.0. Vi rekommenderar dock att du uppdaterar till den senaste tillgängliga MSTest-versionen.

Om du vill anmäla dig, lägg till <EnableMSTestRunner>true</EnableMSTestRunner> under en PropertyGroup i Directory.Build.props-filen.

Anmärkning

När du använder MSTest.Sdk används Microsoft.Testing.Platform som standard, såvida inte <UseVSTest>true</UseVSTest> anges.

NUnit

Microsoft.Testing.Platform stöds av NUnit3TestAdapter från och med 5.0.0.

Om du vill anmäla dig lägger du till <EnableNUnitRunner>true</EnableNUnitRunner> under en PropertyGroup i Directory.Build.props-filen.

xUnit.net

Microsoft.Testing.Platform stöds från och med xunit.v3.

För att välja att aktivera, lägger du till <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner> under PropertyGroup i Directory.Build.props-filen.

dotnet test

Anmäl dig för .NET 9 SDK och tidigare

I .NET 9 SDK och tidigare finns det inget internt stöd för Microsoft.Testing.Platform för dotnet test. Supporten bygger på VSTest-infrastrukturen. Om du vill använda det lägger du till <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport> under en PropertyGroup i-fil Directory.Build.props .

Viktigt!

När du kör Microsoft.Testing.Platform-stöd i det här läget måste du lägga -- till för att skilja argumenten dotnet test från de nya plattformsargumenten. Till exempel dotnet test --no-build -- --list-tests.

Anmäl dig för .NET 10 SDK och senare

Från och med .NET 10 SDK finns det inbyggt stöd för Microsoft.Testing.Platform. Om du vill använda den måste du ange testkörare som Microsoft.Testing.Platform i global.json:

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

Viktigt!

I det här läget används inte längre tillägget -- .

Uppdatera dotnet test anrop

Kommandoradsalternativen dotnet test för är indelade i två kategorier: byggrelaterade argument och testrelaterade.

De byggrelaterade argumenten är irrelevanta för testplattformen och behöver därför inte uppdateras för den nya plattformen. Byggrelaterade argument visas här:

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

Testrelaterade argument är VSTest-specifika och måste därför transformeras för att matcha den nya plattformen. I följande tabell visas mappningen mellan VSTest-argumenten och den nya plattformen:

VSTest-argument Nytt plattformsargument
--test-adapter-path <ADAPTER_PATH> Inte relevant för Microsoft.Testing.Platform
--blame Inte relevant för Microsoft.Testing.Platform
--blame-crash --crashdump (kräver tillägg för kraschdumpar)
--blame-crash-dump-type <DUMP_TYPE> --crashdump-type (kräver tillägg för kraschdumpar)
--blame-crash-collect-always Stöds inte
--blame-hang --hangdump (kräver tillägg för hängdump)
--blame-hang-dump-type <DUMP_TYPE> --hangdump-type (fordrar Hang dump-tillägg)
--blame-hang-timeout <TIMESPAN> --hangdump-timeout (hängdumpstillägg krävs)
--collect <DATA_COLLECTOR_NAME> Beror på datainsamlaren
-d\|--diag <LOG_FILE> --diagnostic
--filter <EXPRESSION> Beror på det valda testramverket
-l\|--logger <LOGGER> Beror på loggaren
--results-directory <RESULTS_DIR> --results-directory <RESULTS_DIR>
-s\|--settings <SETTINGS_FILE> Beror på det valda testramverket
-t\|--list-tests --list-tests
-- <RunSettings arguments> --test-parameter (tillhandahålls av VSTestBridge)

--collect

--collect är en allmän utökningspunkt i VSTest för alla datainsamlare. Utökningsmodellen för Microsoft.Testing.Platform är annorlunda och det finns inget sådant centraliserat argument som ska användas av alla datainsamlare. Med Microsoft.Testing.Platform kan varje datainsamlare lägga till ett eget kommandoradsalternativ. Att till exempel köra Microsoft CodeCoverage via VSTest kan likna följande:

dotnet test --collect "Code Coverage;Format=cobertura"

Med Microsoft.Testing.Platform blir detta:

dotnet test --coverage --coverage-output-format cobertura

Viktigt!

Som vi förklarade tidigare, när du använder Microsoft.Testing.Platform med VSTest-baserade dotnet test behövs extra -- före de argument som är avsedda att skickas till plattformen. Det här blir alltså dotnet test -- --coverage --coverage-output-format cobertura.

--filter

--filter är det VSTest-baserade filtret.

MSTest och NUnit stöder samma filterformat även när de körs med Microsoft.Testing.Platform.

xUnit.net stöder inte samma filterformat när du kör med Microsoft.Testing.Platform. Du måste migrera från det VSTest-baserade filtret till det nya filterstödet i xunit.v3, som tillhandahålls med hjälp av följande kommandoradsalternativ.

xUnit.net specifika alternativ:

  • --filter-class
  • --filter-not-class
  • --filter-method
  • --filter-not-method
  • --filter-namespace
  • --filter-not-namespace
  • --filter-trait
  • --filter-not-trait
  • --filter-query

Mer information finns i Dokumentationen om Microsoft.Testing.Platform för xUnit.net och Frågefilterspråk för xUnit.net.

--logger

Det som vanligtvis kallades "logger" i VSTest kallas "reporter" i Microsoft.Testing.Platform. I Microsoft.Testing.Platform är loggning uttryckligen endast avsett för diagnostisering.

Liknande --collect, --logger är en generell utökningspunkt i VSTest för alla loggare (eller, inom Microsoft.Testing.Platform, en valfri reporter). Varje Microsoft.Testing.Platform-reporter kan lägga till ett eget kommandoradsalternativ och därför finns det inget centraliserat kommandoradsalternativ som VSTests --logger.

En av de mycket vanliga VSTest-loggarna är TRX-loggaren. Den här loggaren anropas vanligtvis på följande sätt:

dotnet test --logger trx

Med Microsoft.Testing.Platform blir kommandot:

dotnet test --report-trx

Viktigt!

Om du vill använda --report-trxmåste du ha Microsoft.Testing.Extensions.TrxReport NuGet-paketet installerat.

Viktigt!

Som vi förklarade tidigare, när du använder Microsoft.Testing.Platform med VSTest-baserade dotnet test behövs extra -- innan de argument som är avsedda att skickas till plattformen. Så det här blir dotnet test -- --report-trx.

--settings

VSTest's --settings används för att specificera en RunSettings-fil för testkörningen. RunSettings stöds inte av kärnan Microsoft.Testing.Platform och ersattes av en modernare testconfig.json konfigurationsfil. MSTest och NUnit stöder dock fortfarande de gamla RunSettings när du kör Microsoft.Testing.Platform och --settings stöds fortfarande.

vstest.console.exe

Om du använder vstest.console.exe direkt rekommenderar vi att du ersätter det med dotnet test kommandot .

Testutforskaren

När du använder Visual Studio eller Visual Studio Code Test Explorer kan du behöva aktivera stödet för Microsoft.Testing.Platform.

Visual Studio

Visual Studio Test Explorer stöder Microsoft.Testing.Platform från och med version 17.14. Om du använder en tidigare version kan du behöva uppdatera Visual Studio till den senaste versionen.

Visual Studio Code

Visual Studio Code med C# DevKit stöder Microsoft.Testing.Platform.

Azure DevOps

När du använder Azure DevOps-uppgifter kan du behöva uppdatera din pipeline för att använda Microsoft.Testing.Platform, beroende på vilken uppgift du använder.

VSTest-uppgift

Om du använder VSTest-uppgiften i Azure DevOps kan du ersätta den med .NET Core-aktiviteten.

.NET Core CLI-uppgift

  • Om du har anpassat arguments för uppgiften följer du samma vägledning för dotnet test migrering.

  • Om du använder DotNetCoreCLI-uppgiften utan att välja den interna Microsoft.Testing.Platform-upplevelsen för .NET 10 SDK och senare via global.json filen måste du ange att aktiviteten arguments ska peka korrekt på den resultatkatalog som den brukade peka på, samt den begärda TRX-rapporten. Till exempel:

    - task: DotNetCoreCLI@2
      displayName: Run unit tests
      inputs:
        command: 'test'
        arguments: '-- --report-trx --results-directory $(Agent.TempDirectory)