Delen via


Testen met 'dotnet-test'

Dit artikel biedt inzichten in het dotnet test CLI-commando, inclusief de historiek en compatibiliteit 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 beschikbare modus vóór de .NET 10 SDK. Het is voornamelijk ontworpen voor VSTest, maar kan ook Microsoft.Testing.Platform-test uitvoeren via het Microsoft.Testing.Platform.MSBuild NuGet-pakket.
  • Microsoft.Testing.Platform-modus: Geïntroduceerd met de .NET 10 SDK, deze modus ondersteunt exclusief testapplicaties gebouwd met Microsoft.Testing.Platform.

Hint

Zie dotnet test voor CLI-referentie.

VSTest-modus van dotnet test

Lange tijd was VSTest 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 de VSTest-modus met behulp van het 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, wijzigt Microsoft.Testing.Platform.MSBuild het VSTest targetgedrag, zodat 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.

Opmerking

MSTest en NUnit maken gebruik van het pakket Microsoft.Testing.Extensions.VSTestBridge . Door in te stellen EnableMSTestRunner of EnableNUnitRunner (waarmee Microsoft.Testing.Platform wordt ingeschakeld), ondersteunt uw testproject zowel VSTest als Microsoft.Testing.Platform. 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. Daarnaast 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 anderen Microsoft.Testing.Platform gebruiken. Deze gemengde configuratie werkt mogelijk niet goed en is een niet-ondersteund scenario.

De volgende lijst bevat een overzicht van de opdrachtregelopties van dotnet test de opdracht in de 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>

Zie dotnet test voor meer informatie over het uitvoeren van MTP-projecten in dotnet test.

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.Testing.Platform (MTP) combineren

Wanneer u in de VSTest-modus werkt dotnet test , is het raadzaam om te voorkomen dat vsTest en 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

  • Om MTP-testapplicaties in dotnet test VSTest-modus uit te voeren, moet u Microsoft.Testing.Platform.MSBuild gebruiken, geeft u MTP-specifieke opdrachtregelopties door na de extra --, en stelt u TestingPlatformDotnetTestSupport in op true.
  • VSTest-georiënteerde opdrachtregelopties worden op de achtergrond genegeerd.

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

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

Om de problemen aan te pakken die optreden bij het uitvoeren van dotnet test met MTP in VSTest-modus, introduceerde .NET een nieuwe modus in de .NET 10 SDK die specifiek is ontworpen voor MTP.

Om deze modus in te schakelen, voeg een dotnet.config bestand toe aan de root van de repository of oplossing.

[dotnet.test.runner]
name = "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, zijn noch TestingPlatformDotnetTestSupport noch de aanvullende -- 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>