Delen via


Overzicht van Microsoft.Testing.Platform

Microsoft.Testing.Platform is een lichtgewicht en draagbaar alternatief voor VSTest- voor het uitvoeren van tests in alle contexten, waaronder CI-pijplijnen (continue integratie), CLI, Visual Studio Test Explorer en VS Code Test Explorer. Microsoft.Testing.Platform is rechtstreeks in uw testprojecten ingesloten en er zijn geen andere app-afhankelijkheden, zoals vstest.console of dotnet test nodig om uw tests uit te voeren.

Microsoft.Testing.Platform is open source. U vindt Microsoft.Testing.Platform code in microsoft/testfx GitHub-opslagplaats.

Microsoft.Testing.Platform-pijlers

Dit nieuwe testplatform is gebaseerd op de ervaring van het .NET Developer Experience Testing-team en is gericht op de uitdagingen die zijn opgetreden sinds de release van .NET Core in 2016. Hoewel er sprake is van een hoog compatibiliteitsniveau tussen .NET Framework en .NET Core/.NET, hebben sommige belangrijke functies zoals het invoegtoepassingssysteem en de nieuwe mogelijke vormfactoren van .NET-compilaties het complex gemaakt om de nieuwe runtime-functie te ontwikkelen of volledig te ondersteunen met het huidige VSTest-platform architectuur.

De belangrijkste factoren voor de ontwikkeling van het nieuwe testplatform worden in het volgende beschreven:

  • Determinisme: Ervoor zorgen dat dezelfde tests in verschillende contexten (lokaal, CI) hetzelfde resultaat opleveren. De nieuwe runtime is niet afhankelijk van reflectie of een andere dynamische .NET-runtimefunctie om een testuitvoering te coördineren.

  • Runtime transparantie: de testruntime interfereert niet met de code van het testframework, creëert geen geïsoleerde contexten zoals AppDomain of AssemblyLoadContext, en gebruikt geen reflectie of aangepaste assembly-resolvers.

  • Compilatietijdregistratie van extensies: Extensies, zoals testframeworks en in-/out-of-process-extensies, worden geregistreerd tijdens het compileren om determinisme te garanderen en om de detectie van inconsistenties te vergemakkelijken.

  • Nul-afhankelijkheden: de kern van het platform is één .NET-assembly, Microsoft.Testing.Platform.dll, die geen andere afhankelijkheden heeft dan de ondersteunde runtimes.

  • Hostable: De Testruntime kan gehost worden in elke .NET-toepassing. Hoewel een consoletoepassing vaak wordt gebruikt om tests uit te voeren, kunt u een testtoepassing maken in elk type .NET-toepassing. Hiermee kunt u tests uitvoeren binnen speciale contexten, zoals apparaten of browsers, waarbij er mogelijk beperkingen zijn.

  • Alle .NET-formulierfactoren ondersteunen: Ondersteuning voor huidige en toekomstige .NET-formulierfactoren, inclusief systeemeigen AOT.

  • Performant-: het vinden van de juiste balans tussen functies en extensiepunten om te voorkomen dat de runtime wordt opgeblazen met niet-fundamentele code. Het nieuwe testplatform is ontworpen om een testuitvoering te 'organiseren' in plaats van implementatiedetails te verstrekken over hoe u dit kunt doen.

  • Uitbreidbaar genoeg: het nieuwe platform is gebouwd op uitbreidbaarheidspunten om maximale aanpassing van runtime-uitvoering mogelijk te maken. Hiermee kunt u de testproceshost configureren, het testproces observeren en informatie van het testframework gebruiken binnen het testhostproces.

  • implementatie van één module: met de functie hostbaarheid kan één module worden geïmplementeerd, waarbij één compilatieresultaat kan worden gebruikt ter ondersteuning van alle uitbreidbaarheidspunten, zowel out-of-process als in-process, zonder dat er verschillende uitvoerbare modules hoeven te worden verzonden.

Ondersteunde testframeworks

  • MSTest. In MSTest wordt de ondersteuning van Microsoft.Testing.Platform uitgevoerd via MSTest runner.
  • Eenheid. In NUnit wordt de ondersteuning van Microsoft.Testing.Platform gedaan via NUnit runner.
  • xUnit.net: In xUnit.net wordt de ondersteuning van Microsoft.Testing.Platform uitgevoerd via xUnit.net runner.
  • TUnit: volledig gebouwd op de Microsoft.Testing.Platform. Voor meer informatie, zie de TUnit-documentatie.

Tests uitvoeren en fouten opsporen

Microsoft.Testing.Platform testprojecten zijn gemaakt als uitvoerbare bestanden die rechtstreeks kunnen worden uitgevoerd (of gedebugd kunnen worden). Er is geen extra testconsole of -opdracht. De app wordt afgesloten met een niet-nul-afsluitcode als er een fout is, wat gebruikelijk is voor de meeste uitvoerbare bestanden. Zie Microsoft.Testing.Platform-afsluitcodesvoor meer informatie over de bekende afsluitcodes.

Aanbeveling

U kunt een specifieke afsluitcode negeren met behulp van de --ignore-exit-code opdrachtregeloptie.

U kunt ook opdrachtregelopties instellen die van toepassing zijn op een specifiek testproject in het projectbestand met behulp van de eigenschap TestingPlatformCommandLineArguments MSBuild. Een veelvoorkomende use-case is voor testprojecten waarvoor alle tests zijn genegeerd, die normaal gesproken worden afgesloten met afsluitcode 8 (de testsessie heeft nul tests uitgevoerd). In dit scenario kunt u het volgende toevoegen onder een PropertyGroup in uw projectbestand:

<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>

Belangrijk

Standaard verzamelt Microsoft.Testing.Platform telemetrie. Zie voor meer informatie en opties om u af te melden Microsoft.Testing.Platform telemetrie.

Het publiceren van het testproject met behulp van dotnet publish en het rechtstreeks uitvoeren van de app is een andere manier om uw tests uit te voeren. Bijvoorbeeld ./Contoso.MyTests.exe uitvoeren. In sommige scenario's is het ook mogelijk om dotnet build te gebruiken om het uitvoerbare bestand te produceren, maar er kunnen edge-gevallen zijn om rekening mee te houden, zoals Native AOT.

Gebruik dotnet run

De opdracht dotnet run kan worden gebruikt om uw testproject te bouwen en uit te voeren. Dit is de eenvoudigste manier, hoewel soms de traagste, om uw tests uit te voeren. Het gebruik van dotnet run is praktisch wanneer u lokaal tests bewerkt en uitvoert, omdat het testproject zo nodig opnieuw wordt opgebouwd. dotnet run vindt het project ook automatisch in de huidige map.

dotnet run --project Contoso.MyTests

Voor meer informatie over dotnet run, zie dotnet run.

Gebruik dotnet exec

De opdracht dotnet exec of dotnet wordt gebruikt voor het uitvoeren (of uitvoeren) van een al gebouwd testproject. Dit is een alternatief voor het rechtstreeks uitvoeren van de toepassing. dotnet exec vereist pad naar de dll van het ingebouwde testproject.

dotnet exec Contoso.MyTests.dll

of

dotnet Contoso.MyTests.dll

Notitie

Het opgeven van het pad naar het uitvoerbare testproject (*.exe) resulteert in een fout:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

Voor meer informatie over dotnet exec, zie dotnet exec.

Gebruik dotnet test

Microsoft.Testing.Platform biedt een compatibiliteitslaag met vstest.console.exe en dotnet test die waarborgt dat u uw tests kunt uitvoeren zoals voorheen, terwijl u een nieuw uitvoeringsscenario mogelijk maakt.

dotnet test Contoso.MyTests.dll

Opties

In de onderstaande lijst worden alleen de platformopties beschreven. Als u de specifieke opties van elke extensie wilt zien, raadpleegt u de pagina met extensiedocumentatie of gebruikt u de optie --help.

  • @

    Hiermee geeft u de naam van het antwoordbestand. De naam van het antwoordbestand moet onmiddellijk het @-teken volgen zonder spatie tussen het @-teken en de naam van het antwoordbestand.

    Opties in een antwoordbestand worden geïnterpreteerd alsof ze op die plaats op de commandoregel aanwezig waren. Elk argument in een antwoordbestand moet beginnen en eindigen op dezelfde regel. U kunt het backslashteken () niet gebruiken om lijnen samen te voegen. Het gebruik van een antwoordbestand helpt bij zeer lange opdrachten die de terminallimieten kunnen overschrijden. U kunt een antwoordbestand combineren met inline opdrachtregelargumenten. Bijvoorbeeld:

    ./TestExecutable.exe @"filter.rsp" --timeout 10s
    

    waarbij filter.rsp- de volgende inhoud kan hebben:

    --filter "A very long filter"
    

    Of één rsp-bestand kan worden gebruikt om zowel time-out als filter als volgt op te geven:

    ./TestExecutable.exe @"arguments.rsp"
    
    --filter "A very long filter"
    --timeout 10s
    
  • --config-file

    Geeft een testconfig.json bestand op.

  • --diagnostic

    Hiermee schakelt u de diagnostische logboekregistratie in. Het standaardlogboekniveau is Trace. Het bestand is geschreven in de uitvoermap met de volgende naamindeling, log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

    Dwingt de ingebouwde bestandlogger om synchroon logs te schrijven. Handig voor scenario's waarin u geen logboekvermeldingen wilt verliezen (als het proces vastloopt). Dit vertraagt de uitvoering van de test.

  • --diagnostic-output-directory

    De uitvoermap van de diagnostische logboekregistratie, indien niet opgegeven, wordt het bestand gegenereerd in de standaardmap TestResults map.

  • --diagnostic-output-fileprefix

    Het voorvoegsel voor de naam van het logboekbestand. Standaardwaarde is "log_".

  • --diagnostic-verbosity

    Definieert het uitgebreidheidsniveau wanneer de --diagnostic switch wordt gebruikt. De beschikbare waarden zijn Trace, Debug, Information, Warning, Errorof Critical.

  • --exit-on-process-exit

    Sluit het testproces af wanneer het afhankelijke proces wordt afgesloten. PID moet worden opgegeven.

  • --help

    Hiermee wordt een beschrijving afgedrukt van hoe de opdracht gebruikt moet worden.

  • --ignore-exit-code

    Hiermee kunnen sommige niet-nul afsluitcodes worden genegeerd en in plaats daarvan worden geretourneerd als 0. Zie Specifieke afsluitcodes negerenvoor meer informatie.

  • --info

    Geeft geavanceerde informatie weer over de .NET-testtoepassing, zoals:

    • Het platform.
    • De omgeving.
    • Elke geregistreerde opdrachtregelprovider, zoals de bijbehorende name, version, descriptionen options.
    • Elk geregistreerd hulpprogramma, zoals de bijbehorende command, name, version, description en alle opdrachtregelproviders.

    Deze functie wordt gebruikt om inzicht te verkrijgen in extensies die dezelfde opdrachtregeloptie registreren of de wijzigingen in beschikbare opties tussen meerdere versies van een extensie (of het platform).

  • --list-tests

    Lijst met beschikbare tests. Tests worden niet uitgevoerd.

  • --maximum-failed-tests

    Hiermee geeft u het maximum aantal mislukte tests op dat, wanneer bereikt, de testuitvoering stopt. Ondersteuning voor deze switch vereist dat frameworkauteurs de IGracefulStopTestExecutionCapability-mogelijkheid implementeren. De afsluitcode bij het bereiken van die hoeveelheid testfouten is 13. Zie Afsluitcodes van Microsoft.Testing.Platformvoor meer informatie.

    Notitie

    Deze functie is beschikbaar in Microsoft.Testing.Platform vanaf versie 1.5.

  • --minimum-expected-tests

    Hiermee geeft u het minimale aantal tests op dat naar verwachting moet worden uitgevoerd. Standaard wordt verwacht dat ten minste één test wordt uitgevoerd.

  • --results-directory

    De map waar de testresultaten worden geplaatst. Als de opgegeven map niet bestaat, wordt deze gemaakt. De standaardwaarde is TestResults in de map die de testtoepassing bevat.

  • --timeout

    Een time-out voor de uitvoering van een globale test. Gebruikt één argument als tekenreeks in de notatie <value>[h|m|s] waar <value> zwevend is.

MSBuild-integratie

Het NuGet-pakket Microsoft.Testing.Platform.MSBuild biedt verschillende integraties voor Microsoft.Testing.Platform met MSBuild:

  • Ondersteuning voor dotnet test. Zie Testen met dotnet-test voor meer informatie.
  • Ondersteuning voor ProjectCapability wordt vereist door de Visual Studio en Visual Studio Code Test Explorers.
  • Automatisch genereren van het toegangspunt (Main methode).
  • Automatisch genereren van het configuratiebestand.

Notitie

Deze integratie werkt op een transitieve manier (een project dat verwijst naar een ander project dat naar dit pakket verwijst, gedraagt zich alsof het naar het pakket verwijst) en kan worden uitgeschakeld via de eigenschap IsTestingPlatformApplication MSBuild.

Zie ook