Dela via


Testa med "dotnet-test"

Den här artikeln ger insikter om cli-kommandot dotnet test, inklusive dess historikkompatibilitet med både VSTest och Microsoft. Testing.Platform (MTP).

Kommandot dotnet test körs i två primära lägen:

  • VSTest läge: Detta är standardläget för dotnet test och var det enda tillgängliga läget före .NET 10 SDK. Den är främst utformad för VSTest men kan också köras Microsoft. Test.Platform-test via Microsoft. Testing.Platform.MSBuild NuGet-paket.
  • Microsoft.Testing.Platform läge: Introducerades med .NET 10 SDK och har exklusivt stöd för testapplikationer som byggts med Microsoft.Testing.Platform.

Tips/Råd

För CLI-referens, se dotnet-test.

VSTest-läge för dotnet test

UNDER lång tid var VSTest den enda testplattformen i .NET. Därför dotnet test utformades exklusivt för VSTest, med alla kommandoradsalternativ skräddarsydda för VSTest.

Processen innebär att VSTest anropa MSBuild-målet, vilket utlöser andra interna mål att köra och slutligen kör vstest.console. Alla dotnet test kommandoradsalternativ översätts till deras motsvarigheter i vstest.console.

Köra MTP-projekt med VSTest-läge

dotnet test har utformats för att köra VSTest-projekt i VSTest-läge. Du kan dock köra MTP-projekt i dotnet test VSTest-läge med hjälp av Microsoft. Testing.Platform.MSBuild-paketet. Från användarens perspektiv aktiveras det här stödet genom att ange TestingPlatformDotnetTestSupport egenskapen MSBuild till true (det är false som standard av bakåtkompatibilitetsskäl). När den här egenskapen är inställd på true Microsoft. Testing.Platform.MSBuild ändrar VSTest målbeteende och omdirigerar det till anropet InvokeTestingPlatform. InvokeTestingPlatform är ett MSBuild-mål som ingår i Microsoft. Testing.Platform.MSBuild som ansvarar för korrekt körning av MTP-testprogram som körbara filer. VSTest-specifika kommandoradsalternativ, till exempel --logger, ignoreras tyst i det här läget. Om du vill inkludera MTP-specifika argument, till exempel --report-trx, måste du lägga till dem efter ytterligare --. Till exempel dotnet test -- --report-trx. I MTP 1.9 genereras en varning med kod MTP0001 när ett argument som ignoreras tyst identifieras.

Anmärkning

MSTest och NUnit använder Microsoft. Testing.Extensions.VSTestBridge paket. Genom att ange EnableMSTestRunner eller EnableNUnitRunner (vilket aktiverar Microsoft. Testing.Platform) stöder testprojektet både VSTest och Microsoft. Testing.Platform. I det scenariot, om du använder VSTest-läget dotnet test och inte ställer in TestingPlatformDotnetTestSupport som sant, använder du i princip helt VSTest, som om EnableMSTestRunner och EnableNUnitRunner inte var inställda på sant.

Anmärkning

Vi rekommenderar starkt att du anger egenskapen TestingPlatformDotnetTestSupport i Directory.Build.props. Detta säkerställer att du inte behöver lägga till den i varje testprojektfil individuellt. Dessutom förhindrar det risken för att introducera ett nytt testprojekt som inte anger den här egenskapen, vilket kan resultera i en lösning där vissa projekt använder VSTest medan andra använder Microsoft. Testing.Platform. Den här blandade konfigurationen kanske inte fungerar korrekt och är ett scenario som inte stöds.

Viktigt!

Att köra MTP-projekt under VSTest-läge anses vara äldre till förmån för den nyare upplevelsen i .NET 10 SDK. Stöd för att köras i det här läget tas bort i Microsoft. Testing.Platform version 2 om den körs med .NET 10 SDK. Stödet förblir tillgängligt för .NET 9 SDK och tidigare för bakåtkompatibilitet. Mer information finns i Migrera till MTP-läge för dotnet test.

I följande lista beskrivs kommandoradsalternativen för kommandot dotnet test i VSTest-läge som stöds av Microsoft. Testing.Platform. Dessa alternativ är specifika för byggprocessen och skickas inte till VSTest, vilket är anledningen till att de fungerar med 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>

Tips/Råd

Du kan anpassa kommandoradsargumenten för testprogrammet via TestingPlatformCommandLineArguments egenskapen MSBuild:

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

Visa fel för varje test

Som standard sammanfattas testfel i en .log fil och ett enskilt fel per testprojekt rapporteras till MSBuild.

Om du vill visa fel per misslyckat test anger du -p:TestingPlatformShowTestsFailure=true på kommandoraden eller lägger till egenskapen <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> i projektfilen.

På kommandoraden:

dotnet test -p:TestingPlatformShowTestsFailure=true

Visa fullständiga plattformsutdata

Som standardinställning samlas alla konsolutdata som det underliggande körbara testprogrammet skriver in och göms för användaren. Detta inkluderar banderoll, versionsinformation och formaterad testinformation.

Om du vill visa den här informationen tillsammans med MSBuild-utdata använder du <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Det här alternativet påverkar inte hur testramverket samlar in användarutdata som skrivits av Console.WriteLine eller andra liknande sätt att skriva till konsolen.

På kommandoraden:

dotnet test -p:TestingPlatformCaptureOutput=false

Avancerad teknisk information

I dotnet test VSTest-läge -- används för att ange RunSettings-argumenten. dotnet test Ursprungligen utformades för att skicka dessa argument som en MSBuild-egenskap med namnet VSTestCLIRunSettings. När vi kör MTP-testprogram i VSTest-läge återanvänder vi därför värdet VSTestCLIRunSettings för för att representera "programargumenten".

Blanda VSTest och Microsoft. Testing.Platform (MTP)

När du kör dotnet test i VSTest-läge rekommenderar vi att du undviker att inkludera både VSTest och Microsoft. Testing.Platform i samma lösning.

Det här scenariot stöds inte officiellt och du bör vara medveten om följande:

  • VSTest-specifika kommandoradsalternativ gäller endast för VSTest-projekt och inte för MTP-testprogram.
  • MTP-specifika kommandoradsalternativ som anges efter -- behandlas som RunSettings-argument för VSTest-projekt.

Viktiga lärdomar

  • Om du vill köra MTP-testprogram i dotnet test VSTest-läge bör du använda Microsoft.Testing.Platform.MSBuild, skicka MTP-specifika kommandoradsalternativ efter extra -- och ange TestingPlatformDotnetTestSupport till true.
  • VSTest-orienterade kommandoradsalternativ ignoreras tyst.

På grund av dessa problem har .NET introducerat ett nytt dotnet test läge som är särskilt utformat för MTP. Vi rekommenderar att MTP-användare övergår från VSTest dotnet test läge till det nya läget med .NET 10 SDK.

Microsoft. Testing.Platform (MTP) läge för dotnet test

För att åtgärda de problem som uppstår när du kör dotnet test med MTP i VSTest-läge .NET introducerat ett nytt läge i .NET 10 SDK som är särskilt utformat för MTP.

Om du vill aktivera det här läget lägger du till följande konfiguration i global.json filen:

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

Viktigt!

Upplevelsen av dotnet test för MTP stöds endast i Microsoft.Testing.Platform version 1.7 och senare.

Eftersom det här läget är särskilt utformat för Microsoft.Testing.Platform, krävs varken TestingPlatformDotnetTestSupport eller det ytterligare --.

Viktigt!

Det här läget är endast kompatibelt med Microsoft. Testing.Platform version 1.7.0 och senare.

Viktigt!

Om testprojektet stöder VSTest men inte stöder MTP genereras ett fel.

Tips/Råd

Du kan anpassa kommandoradsargumenten för testprogrammet via TestingPlatformCommandLineArguments egenskapen MSBuild:

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

Migrera till MTP-läge för dotnet test

För användare av MTP som använder VSTest-läget dotnet testi finns det få åtgärder som krävs för att migrera till den nyare dotnet test upplevelsen:

  1. Lägg till test avsnitt i global.json filen enligt ovan.
  2. Ta bort TestingPlatformDotnetTestSupport egenskapen MSBuild eftersom den inte längre krävs.
  3. Ta bort TestingPlatformCaptureOutput och TestingPlatformShowTestsFailure MSBuild-egenskaper eftersom de inte längre används av den nya dotnet test.
  4. Ta bort extra --, till exempel dotnet test -- --report-trx ska bli dotnet test --report-trx.
  5. Om du till exempel dotnet test MySolution.slnskickar en specifik lösning (eller katalog som innehåller en lösning) bör detta bli dotnet test --solution MySolution.sln.
  6. Om du skickar ett visst projekt (eller en katalog som innehåller ett projekt), till exempel , dotnet test MyProject.csprojbör detta bli dotnet test --project MyProject.csproj.
  7. Om du till exempel dotnet test path/to/UnitTests.dllskickar en specifik dll bör detta bli dotnet test --test-modules path/to/UnitTests.dll. Observera att även --test-modules stöder globbning.