Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik Microsoft. Testing.Platform (MTP) om MSTest-tests uit te voeren in UWP- en WinUI 3-toepassingen. De toepassing fungeert als de testhost en is eigenaar van de ui-thread en de levensduur van het proces.
Important
De volledige Windows toepassingsondersteuningsmatrix die in dit artikel wordt beschreven, is beschikbaar met MSTest 4.5 en MTP 2.5. Totdat de stabiele versies worden uitgebracht, gebruikt u overeenkomende 4.5- en 2.5 preview-pakketten. Als u MTP-pakketten rechtstreeks beheert, houdt u de platform- en extensiepakketversies uitgelijnd.
Een toepassingsmodel kiezen
MSTest.Sdk ondersteunt de volgende Windows toepassingsmodellen via MTP:
| Applicatiemodel | Verpakking en vertrouwen | Host opstarten testen | Opdracht uitvoeren |
|---|---|---|---|
Klassieke UWP (uap10.0) |
In pakket opgenomen AppContainer | Een full-trust sidecar registreert het pakket en activeert de app via de Application User Model ID (AUMID). |
MSBuild met als InvokeTestingPlatform doel |
Moderne UWP (.NET 10 met UseUwp) |
AppContainer in pakketvorm | Een full-trust sidecar registreert het pakket en activeert de app door AUMID. |
MSBuild met het InvokeTestingPlatform doel |
| Verpakte WinUI 3 | Verpakte volledige vertrouwensrelatie | Een full-trust sidecar registreert het pakket en activeert de app door AUMID. |
dotnet run of dotnet test --project |
| Uitgepakte WinUI 3 | Geen pakketidentiteit, volledig vertrouwen | MTP start het uitvoerbare bestand van de app rechtstreeks. |
dotnet run of dotnet test --project |
WinUI 3 packagedClassicApp met TrustLevel="appContainer" |
Verpakte AppContainer | Een sidecar met volledig vertrouwen activeert de app en machtigt de exacte beveiligings-id (SID) van het pakket via MTP-communicatiekanalen. |
dotnet msbuild met het InvokeTestingPlatform doel |
Packaging en sandboxing zijn losstaande keuzes. Een verpakte WinUI 3-bureaublad-app heeft pakketidentiteit, maar wordt standaard uitgevoerd als een volledig vertrouwensproces. Een UWP-app wordt altijd uitgevoerd in AppContainer. Een verpakte WinUI 3-app wordt alleen in AppContainer uitgevoerd wanneer in het manifest TrustLevel="appContainer" is ingesteld.
Voor oudere MSTest- of MTP-versies moet u uw bestaande VSTest-configuratie voor UWP-projecten behouden. Voor systeemeigen MTP-uitvoering voor UWP- en AppContainer-hosts is MSTest 4.5 en MTP 2.5 vereist.
De sidecar van het MTP-app-model begrijpen
Voor een verpakte app kan het eerste testhulpprogrammaproces niet in het pakket worden uitgevoerd. MSTest.Sdk start een full-trust-sidecar-controller die:
- Bereidt de opdrachtregelargumenten voor en verzorgt annulering, herpogingen, rapportage en de afhandeling van afsluitcodes.
- Registreert het build-uitvoerpakket en activeert de exacte manifesttoepassing door AUMID.
- Autoriseert alleen de geselecteerde pakket-SID wanneer een AppContainer-host verbinding maakt met MTP benoemde pipes.
- Herstelt TRX-, dump-, diagnostische en pogingsartefacten uit opslag in pakketeigendom.
De testtoepassing host nog steeds MTP en MSTest in een eigen proces. De uitvoering van UWP vereist Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider of de Visual Studio-implementatieruntime niet.
Voor een UWP windowsApp geeft Windows via LaunchActivatedEventArgs.Arguments één activeringsstring door in plaats van de normale procesargumenten. Roep PackagedAppExtensions.GetTestApplicationArguments aan voordat u de MTP-builder aanmaakt. De packaged-app-extensie herstelt de oorspronkelijke argumentenarray en de verbindingsmetadata van de controller.
Voor een WinUI 3 packagedClassicApp, inclusief een die wordt uitgevoerd in AppContainer, gebruikt u de normale procesargumenten.
Voldoen aan de vereisten
Gebruik de vereisten die van toepassing zijn op uw project:
- Gebruik .NET SDK 10 of hoger voor de MSTest 4.5-hulpprogrammaketen en
dotnet test --project. - Gebruik voor UWP desktop MSBuild van Visual Studio met de Universeel Windows-platform-workload en de vereiste Windows SDK. Deze onderdelen bieden alleen build-time-ondersteuning.
- Voor WinUI 3 installeert u de Windows hulpprogramma's voor het ontwikkelen van toepassingen en verwijst u naar een compatibele Windows App SDK versie.
- Schakel voor verpakte test-apps de ontwikkelaarsmodus van Windows in of configureer sideloading, zodat Windows een niet-ondertekende build-uitvoerindeling kan registreren.
- Voer voor AppContainer-test-apps de controller uit als een gebruiker zonder verhoogde rechten.
UWP-tests configureren
Een modern UWP-project configureren
Gebruik MSTest.Sdk 4.5 of hoger, gebruik .NET 10 als doelversie met een Windows-platformversie en stel UseUwp in op true. Bewaar uw bestaande UWP XAML-, MSIX-, architectuur- en systeemeigen AOT-instellingen.
Visual Studio schakelt UseUwpTools normaal gesproken in tijdens het buildproces. MSTest.Sdk selecteert het UWP-toepassingsmodel wanneer UseUwpToolstrue is, of wanneer UseUwptrue is en UseUwpTools nog niet is ingesteld.
Als u alleen UWP-verwijzingen nodig hebt voor een niet-UWP-MTP-testtoepassing, stelt u UseUwpTools in op false. De SDK gebruikt vervolgens de directe MTP-runner, tenzij een ander verpakt toepassingsmodel de sidecar vereist.
Zie het moderne UWP MTP-voorbeeld voor een volledig project.
Een klassiek UWP-project configureren
Behoud de bestaande uap10.0 projectstructuur, de desktop-MSBuild-toolchain en de UWP-uitbreidings-SDK. Importeer MSTest.Sdk 4.5 of hoger en schakel MSTest runner en MTP in. MSTest.Sdk levert de met UAP compatibele bootstrap-, adapter- en runtimeonderdelen.
Zie het klassieke UWP MTP-voorbeeld voor een volledig project.
UWP-tests uitvoeren
Open een Developer PowerShell voor Visual Studio. Bouw de oplossing voor een concrete architectuur en roep vervolgens MTP aan:
msbuild UwpTests.sln /restore /p:Configuration=Release /p:Platform=x64
msbuild UwpTests.csproj /t:InvokeTestingPlatform /p:Configuration=Release /p:Platform=x64 /p:TestingPlatformCommandLineArguments="--report-trx"
De tweede opdracht registreert het pakket, activeert de app door AUMID, voert reguliere en UI-threadtests uit, kopieert resultaatartefacten uit pakketopslag en retourneert de afsluitcode voor de testuitvoering.
WinUI 3-tests configureren
Gebruik MSTest.Sdk 4.5 of hoger, stel UseWinUI in op true en gebruik een Windows-specifiek doelframework. Gebruik voor verpakte activering Windows platformversie 10.0.19041.0 of hoger.
MTP hosten vanuit de WinUI-toepassing
Maak en activeer voor een zelf-gehoste WinUI-test-app het testvenster in OnLaunched, en publiceer vervolgens de dispatcherqueue:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Voer de gegenereerde MTP-helper uit, wijs het resultaat toe aanEnvironment.ExitCode, sluit het venster en roep het aan:Exit
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Gebruiken UITestMethod voor tests die WinUI-objecten maken of openen. Gebruiken TestMethod voor tests waarvoor de UI-thread niet is vereist.
Warning
Voeg [assembly: WinUITestTarget(...)] niet toe aan een self-hosted WinUI-test-app. Dat kenmerk start een WinUI-toepassing voor een afzonderlijke testhost, maar de zelf-hostende app heeft al aangeroepen Application.Start.
Een uitgepakte app configureren
Stel WindowsPackageType in op None. De app heeft geen MSIX-identiteit of AppxManifest.xml, dus MTP start het uitvoerbare bestand rechtstreeks. Voeg de extensie voor verpakte apps niet handmatig toe.
De Windows App SDK injecteert normaal gesproken de bootstrap-initializer wanneer het project aan deze voorwaarden voldoet:
-
WindowsPackageTypeisNone. -
OutputTypeisExeofWinExe. -
WindowsAppSDKSelfContainedis niettrue.
Als een host die geen Windows App SDK-app is uw testbibliotheek laadt, stelt u WindowsAppSdkBootstrapInitialize in de bibliotheek in op true.
VSTest biedt geen ondersteuning voor uitgepakte WinUI 3-test-apps omdat de WinUI-provider een AppX-manifest vereist.
Zie het uitgepakte WinUI MTP-voorbeeld voor een volledig project.
Een verpakte app voor volledig vertrouwen configureren
Behoud de standaard verpakte WinUI-configuratie en de bijbehorende Package.appxmanifest. MSTest.Sdk verwijst en registreert Microsoft.Testing.Extensions.PackagedApp automatisch voor het verpakte project.
Bel AddPackagedAppDeployment ook niet. Een MTP-uitvoering kan slechts één startprogramma voor testhosts registreren. Stel EnableMicrosoftTestingExtensionsPackagedApp alleen in op false wanneer een aangepast startprogramma de pakketactivering verzorgt.
Zie het verpakte WinUI MTP-voorbeeld voor een volledig project.
Een AppContainer-app configureren
Configureer de toepassing in het WinUI-pakketmanifest als packagedClassicApp en stel deze in TrustLevel="appContainer". MTP 2.5 autoriseert de exacte pakket-SID op de controller en extensiepijpen. Het verleent ALL APPLICATION PACKAGES niet en vereist ook geen loopback-uitzondering.
Voer de sidecar uit zonder verhoogde bevoegdheid. Gebruik het InvokeTestingPlatform doel zodat de sidecar resultaten en diagnostische gegevens van het pakket LocalState naar de aangevraagde map met resultaten kan kopiëren.
Zie het AppContainer WinUI MTP-voorbeeld voor een volledig project.
WinUI 3-tests uitvoeren
Bouwen voor een concrete architectuur. Voor een verpakte full-trust-app of een app zonder pakket voert u het volgende uit:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
U kunt ook dotnet run --no-build -p:Platform=x64 gebruiken.
Voor een AppContainer WinUI-app gebruikt u het sidecar-doel en een map met absolute resultaten:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Niet gebruiken dotnet exec voor een WinUI-app. WinUI resolveert PRI-resources relatief aan het procespad.
Problemen met de installatie oplossen
| Symptoom | Controle |
|---|---|
De app rapporteert meerdere aanroepen naar Application.Start. |
Verwijder het WinUITestTarget kenmerk uit een zelf-hostende WinUI-test-app. |
| De testuitvoering is voltooid, maar het proces blijft geopend. | Sluit het testvenster en roep Exit aan nadat de MTP-run is voltooid. |
Mislukte tests geven procesafsluitcode 0 terug. |
Wijs het MTP-uitvoeringsresultaat toe aan Environment.ExitCode. |
Een uitgepakte WinUI-uitvoering rapporteert een ontbrekende AppxManifest.xmlfout. |
Controleer of het project MTP gebruikt in plaats van VSTest. |
| Een verpakte uitvoering kan de app niet registreren of activeren. | Controleer het Windows-doelframework, de ontwikkelaarsmodus of het beleid voor sideloaden, de architectuur en het item voor het uitvoerbare bestand in het manifest. |
| Een AppContainer-host kan geen verbinding maken met de controller. | Gebruik MSTest 4.5 en MTP 2.5 of hoger en voer de controller uit zonder verhoogde bevoegdheid. |
| Een AppContainer-rapport wordt niet gekopieerd naar de aangevraagde map. | Gebruik InvokeTestingPlatform en geef een map met absolute resultaten op. |