Delen via


Testen met 'dotnet-test'

Dit artikel biedt inzicht in de dotnet test CLI-opdracht, inclusief de geschiedeniscompatibiliteit met zowel VSTest als Microsoft. Testing.Platform (MTP).

De dotnet test opdracht werkt in twee primaire modi:

  • VSTest modus: dit is de standaardmodus voor dotnet test en was de enige modus die beschikbaar was voor de .NET 10 SDK. Het is voornamelijk ontworpen voor VSTest, maar kan ook de Microsoft.Testing.Platform-test uitvoeren via het Microsoft.Testing.Platform.MSBuild NuGet-pakket.
  • Microsoft. Testing.Platform-modus: Geïntroduceerd met de .NET 10 SDK, ondersteunt deze modus uitsluitend testtoepassingen die zijn gebouwd met Microsoft. Testing.Platform.

Hint

Zie dotnet test voor CLI-referentie.

VSTest-modus van dotnet test

VSTest was lang het enige testplatform in .NET. Daardoor is dotnet test exclusief ontworpen voor VSTest, waarbij alle opdrachtregelopties zijn afgestemd op VSTest.

Het proces omvat het aanroepen van het VSTest MSBuild-doel, dat andere interne doelen activeert om uit te voeren en uiteindelijk vstest.console uitvoert. Alle dotnet test commandoregelopties worden vertaald naar hun equivalenten in vstest.console.

MTP-projecten uitvoeren met VSTest-modus

dotnet test is ontworpen om VSTest-projecten uit te voeren in de VSTest-modus. U kunt echter MTP-projecten uitvoeren in dotnet test VSTest-modus met behulp van de Microsoft. Testing.Platform.MSBuild pakket. Vanuit het perspectief van de gebruiker wordt deze ondersteuning ingeschakeld door de MSBuild-eigenschap TestingPlatformDotnetTestSupport in te stellen op true (de standaardwaarde is false om redenen van achterwaartse compatibiliteit). Wanneer deze eigenschap is ingesteld op true, Microsoft. Testing.Platform.MSBuild wijzigt het VSTest doelgedrag, waarbij het wordt omgeleid om InvokeTestingPlatform aan te roepen. InvokeTestingPlatform is een MSBuild-doel dat is opgenomen in Microsoft. Testing.Platform.MSBuild die verantwoordelijk is voor het correct uitvoeren van MTP-testtoepassingen als uitvoerbare bestanden. VSTest-specifieke opdrachtregelopties, zoals --logger, worden op de achtergrond genegeerd in deze modus. Als u MTP-specifieke argumenten wilt opnemen, zoals --report-trx, moet u deze toevoegen na een extra --. Bijvoorbeeld: dotnet test -- --report-trx. In MTP 1.9 wordt een waarschuwing met code MTP0001 geproduceerd wanneer een argument dat op de achtergrond wordt genegeerd wordt gedetecteerd.

Opmerking

MSTest en NUnit gebruiken de Microsoft. Testing.Extensions.VSTestBridge pakket. Door de instellingen EnableMSTestRunner of EnableNUnitRunner in te stellen (waarmee Microsoft.Testing.Platform wordt ingeschakeld), zal uw testproject zowel VSTest als Microsoft.Testing.Platform ondersteunen. Als u in dat scenario de VSTest-modus gebruikt met dotnet test en TestingPlatformDotnetTestSupport niet op waarheid instelt, wordt u in wezen volledig uitgevoerd met VSTest, alsof EnableMSTestRunner en EnableNUnitRunner niet op waarheid zijn ingesteld.

Opmerking

Het wordt ten zeerste aanbevolen om de TestingPlatformDotnetTestSupport eigenschap in te stellen in Directory.Build.props. Dit zorgt ervoor dat u deze niet afzonderlijk hoeft toe te voegen aan elk testprojectbestand. Bovendien voorkomt het het risico dat er een nieuw testproject wordt ingevoerd dat deze eigenschap niet instelt, wat kan leiden tot een oplossing waarbij sommige projecten VSTest gebruiken terwijl andere Microsoft gebruiken. Testing.Platform. Deze gemengde configuratie werkt mogelijk niet goed en is een niet-ondersteund scenario.

Belangrijk

Het uitvoeren van MTP-projecten onder de VSTest-modus wordt beschouwd als verouderd ten gunste van de nieuwere ervaring in .NET 10 SDK. De ondersteuning voor het uitvoeren onder deze modus wordt verwijderd in Microsoft. Testing.Platform versie 2 als deze wordt uitgevoerd met .NET 10 SDK. De ondersteuning blijft beschikbaar voor .NET 9 SDK en eerdere versies voor achterwaartse compatibiliteit. Zie Migreren naar MTP-modus van dotnet testvoor meer informatie.

De volgende lijst bevat een overzicht van de opdrachtregelopties van dotnet test opdracht in vsTest-modus die worden ondersteund door Microsoft. Testing.Platform. Deze opties zijn specifiek voor het buildproces en worden niet doorgegeven aan VSTest, daarom werken ze met 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>

Hint

U kunt de opdrachtregelargumenten van uw testtoepassing aanpassen via TestingPlatformCommandLineArguments de eigenschap MSBuild:

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

Falingen per test weergeven

Standaard worden testfouten samengevat in een .log-bestand en wordt één fout per testproject gerapporteerd aan MSBuild.

Als u fouten per mislukte test wilt weergeven, geeft u -p:TestingPlatformShowTestsFailure=true op de opdrachtregel op of voegt u de eigenschap <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> toe aan het projectbestand.

Op de opdrachtregel:

dotnet test -p:TestingPlatformShowTestsFailure=true

Volledige platformuitvoer weergeven

Standaard wordt alle console-uitvoer van het onderliggende testprogramma vastgelegd en voor de gebruiker verborgen. Dit omvat de banner, versie-informatie en opgemaakte testgegevens.

Gebruik <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>om deze informatie samen met MSBuild-uitvoer weer te geven.

Deze optie heeft geen invloed op de manier waarop het testframework gebruikersuitvoer vastlegt die is geschreven door Console.WriteLine of andere vergelijkbare manieren om naar de console te schrijven.

Op de opdrachtregel:

dotnet test -p:TestingPlatformCaptureOutput=false

Geavanceerde technische details

In dotnet test de VSTest-modus wordt de -- functie gebruikt om de RunSettings-argumenten aan te geven. dotnet test Oorspronkelijk is ontworpen om deze argumenten door te geven als een MSBuild-eigenschap genaamdVSTestCLIRunSettings. Daarom zetten we bij het uitvoeren van MTP-testtoepassingen in de VSTest-modus de waarde van VSTestCLIRunSettings in om de 'toepassingsargumenten' weer te geven.

VsTest en Microsoft mengen. Testing.Platform (MTP)

Wanneer u dotnet test uitvoert in de VSTest-modus, is het raadzaam om te vermijden dat zowel VSTest als Microsoft.Testing.Platform in dezelfde oplossing worden opgenomen.

Dit scenario wordt niet officieel ondersteund en u moet rekening houden met het volgende:

  • VSTest-specifieke opdrachtregelopties zijn alleen van toepassing op VSTest-projecten en niet op MTP-testtoepassingen.
  • MTP-specifieke opdrachtregelopties die hierna -- worden opgegeven, worden behandeld als RunSettings-argumenten voor VSTest-projecten.

Belangrijke punten

  • Als u MTP-testtoepassingen wilt uitvoeren in dotnet test VSTest-modus, moet u Microsoft.Testing.Platform.MSBuild gebruiken, MTP-specifieke opdrachtregelopties doorgeven na de extra -- en TestingPlatformDotnetTestSupport instellen op true.
  • VSTest-georiënteerde opdrachtregelopties worden op de achtergrond genegeerd.

Vanwege deze problemen heeft .NET een nieuwe dotnet test-modus geïntroduceerd die speciaal is ontworpen voor MTP. We raden MTP-gebruikers aan om over te stappen van de VSTest dotnet test-modus naar de nieuwe modus met de .NET 10 SDK.

Microsoft.Testing.Platform-modus (MTP) van dotnet test

Om de problemen op te lossen die optreden bij het uitvoeren van dotnet test met MTP in VSTest-modus, heeft .NET in de .NET 10 SDK een nieuwe modus geïntroduceerd die speciaal is ontworpen voor MTP.

Als u deze modus wilt inschakelen, voegt u de volgende configuratie toe aan uw global.json bestand:

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

Belangrijk

De dotnet test-ervaring voor MTP wordt alleen ondersteund in Microsoft.Testing.Platform versie 1.7 en hoger.

Omdat deze modus speciaal is ontworpen voor Microsoft. Testing.Platform, noch TestingPlatformDotnetTestSupport noch de aanvullende -- zijn vereist.

Belangrijk

Deze modus is alleen compatibel met Microsoft. Testing.Platform versie 1.7.0 en hoger.

Belangrijk

Als uw testproject VSTest ondersteunt, maar geen ondersteuning biedt voor MTP, wordt er een fout gegenereerd.

Hint

U kunt de opdrachtregelargumenten van uw testtoepassing aanpassen via TestingPlatformCommandLineArguments de eigenschap MSBuild:

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

Migreren naar MTP-modus van dotnet test

Voor gebruikers van MTP die de VSTest-modus gebruiken dotnet test, zijn er enkele acties nodig om te migreren naar de nieuwere dotnet test ervaring:

  1. Voeg test een sectie toe aan uw global.json bestand, zoals hierboven wordt weergegeven.
  2. Verwijder TestingPlatformDotnetTestSupport de eigenschap MSBuild, omdat deze niet meer nodig is.
  3. Verwijder de eigenschappen TestingPlatformCaptureOutput en TestingPlatformShowTestsFailure van MSBuild, omdat deze niet meer door de nieuwe dotnet test worden gebruikt.
  4. Verwijder de extra --, bijvoorbeeld dotnet test -- --report-trx zou dotnet test --report-trx moeten worden.
  5. Als u bijvoorbeeld een specifieke oplossing (of map met een oplossing) doorgeeft, dotnet test MySolution.slnmoet dit worden dotnet test --solution MySolution.sln.
  6. Als u bijvoorbeeld een specifiek project (of map met project) doorgeeft, dotnet test MyProject.csprojmoet dit worden dotnet test --project MyProject.csproj.
  7. Als u een specifieke dll doorgeeft, bijvoorbeeld dotnet test path/to/UnitTests.dll, moet dit dotnet test --test-modules path/to/UnitTests.dll worden. Houd er rekening mee dat --test-modules ook globbing ondersteunt.