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 Text 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 de GitHub-opslagplaats microsoft/testfx .
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 een hoog compatibiliteitsniveau is 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 de huidige VSTest-platformarchitectuur .
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.
Transparantie van runtime: De testruntime heeft geen invloed op de code van het testframework, er worden geen geïsoleerde contexten zoals
AppDomain
ofAssemblyLoadContext
gemaakt en er worden geen reflecties of aangepaste assembly-resolvers gebruikt.Compileer tijdregistratie van extensies: Extensies, zoals testframeworks en in-/out-of-process-extensies, worden geregistreerd tijdens de compileertijd 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.Hostbaar: de testruntime kan worden gehost 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: Huidige en toekomstige .NET-formulierfactoren ondersteunen, 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 verschillende uitvoerbare modules hoeven te worden verzonden.
Ondersteunde testframeworks
- MSTest. In MSTest wordt de ondersteuning
Microsoft.Testing.Platform
uitgevoerd via MSTest runner. - Eenheid. In NUnit wordt de ondersteuning gedaan
Microsoft.Testing.Platform
via NUnit runner. - xUnit.net: In xUnit.net wordt de ondersteuning gedaan
Microsoft.Testing.Platform
via xUnit.net runner. - Eenheid: volledig samengesteld boven op de
Microsoft.Testing.Platform
, zie TUnit-documentatie voor meer informatie
Tests uitvoeren en fouten opsporen
Microsoft.Testing.Platform
testprojecten zijn gebouwd als uitvoerbare bestanden die rechtstreeks kunnen worden uitgevoerd (of fouten kunnen worden opgespoord). Er is geen extra test die console of opdracht uitvoert. De app wordt afgesloten met een niet-nul-afsluitcode als er een fout is, zoals gebruikelijk bij de meeste uitvoerbare bestanden. Zie Afsluitcodes van Microsoft.Testing.Platform voor meer informatie over de bekende afsluitcodes.
Belangrijk
Verzamelt standaard Microsoft.Testing.Platform
telemetrie. Zie Telemetrie van Microsoft.Testing.Platform voor meer informatie en opties voor afmelding.
Het publiceren van het testproject met behulp van dotnet publish
de app en het rechtstreeks uitvoeren van de app is een andere manier om uw tests uit te voeren. Bijvoorbeeld het uitvoeren van de ./Contoso.MyTests.exe
. In sommige scenario's is het ook mogelijk om het uitvoerbare bestand te dotnet build
produceren, maar er kunnen edge-gevallen zijn om rekening mee te houden, zoals een systeemeigen AOT.
dotnet run
gebruiken
De dotnet run
opdracht kan worden gebruikt om uw testproject te bouwen en uit te voeren. Dit is de eenvoudigste manier om uw tests uit te voeren. Het gebruik dotnet run
is praktisch wanneer u lokaal tests bewerkt en uitvoert, omdat dit ervoor zorgt dat het testproject zo nodig opnieuw wordt opgebouwd.
dotnet run
vindt het project ook automatisch in de huidige map.
dotnet run --project Contoso.MyTests
Zie dotnet run voor meer informatie.dotnet run
dotnet exec
gebruiken
De dotnet exec
of dotnet
opdracht wordt gebruikt om een al gebouwd testproject uit te voeren (of uit te voeren). Dit is een alternatief voor het rechtstreeks uitvoeren van de toepassing.
dotnet exec
vereist het pad naar de dll van het ingebouwde testproject.
dotnet exec Contoso.MyTests.dll
or
dotnet Contoso.MyTests.dll
Notitie
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'
Zie dotnet exec voor meer informatie.dotnet exec
dotnet test
gebruiken
Microsoft.Testing.Platform
biedt een compatibiliteitslaag met vstest.console.exe
en dotnet test
zorgt ervoor dat u uw tests net als voorheen kunt uitvoeren tijdens het inschakelen van een nieuw uitvoeringsscenario.
dotnet test Contoso.MyTests.dll
Opties
In de onderstaande lijst worden alleen de platformopties beschreven. Als u de specifieke opties wilt zien die door elke extensie worden gebracht, raadpleegt u de documentatiepagina voor extensies of gebruikt u de --help
optie.
@
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 zich op die plek op de opdrachtregel bevonden. 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
Hiermee geeft u een testconfig.json bestand.
--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 logboekregistratie van bestanden om synchroon logboeken 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, als het bestand niet is opgegeven, wordt gegenereerd in de standaardmap TestResults .
--diagnostic-output-fileprefix
Het voorvoegsel voor de naam van het logboekbestand. Standaard ingesteld op
"log_"
.--diagnostic-verbosity
Definieert het uitgebreidheidsniveau wanneer de
--diagnostic
switch wordt gebruikt. De beschikbare waarden zijnTrace
,Debug
,Information
,Warning
, ofError
Critical
.--exit-on-process-exit
Sluit het testproces af als het afhankelijke proces wordt afgesloten. PID moet worden opgegeven.
--help
Hiermee wordt een beschrijving afgedrukt van het gebruik van de opdracht.
-ignore-exit-code
Hiermee kunnen sommige niet-nul afsluitcodes worden genegeerd en in plaats daarvan worden geretourneerd als
0
. Zie Specifieke afsluitcodes negeren voor meer informatie.--info
Geeft geavanceerde informatie weer over de .NET-testtoepassing, zoals:
- Het platform.
- De omgeving.
- Elke geregistreerde opdrachtregelprovider, zoals bijvoorbeeld
name
,version
,description
enoptions
. - 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 bevindt zich
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 het formaat
<value>[h|m|s]
waarbij<value>
een drijvend getal is.
MSBuild-integratie
Het NuGet-pakket Microsoft.Testing.Platform.MSBuild biedt verschillende integraties voor Microsoft.Testing.Platform
met MSBuild:
- Ondersteuning voor
dotnet test
. Zie dotnet-testintegratie voor meer informatie. - Ondersteuning voor
ProjectCapability
vereist doorVisual Studio
enVisual 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 IsTestingPlatformApplication
eigenschap MSBuild.