Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd Microsoft. Testing.Platform (MTP) för att köra MSTest-tester i UWP- och WinUI 3-program. Programmet fungerar som testvärd och äger dess användargränssnittstråd och processlivslängd.
Important
Den fullständiga Windows programstödmatrisen som beskrivs i den här artikeln är tillgänglig med MSTest 4.5 och MTP 2.5. Tills de stabila versionerna släpps använder du matchande 4.5- och 2.5-förhandsgranskningspaket. Om du hanterar MTP-paket direkt kan du hålla plattforms- och tilläggspaketversionerna justerade.
Välj en programmodell
MSTest.Sdk stöder följande Windows programmodeller via MTP:
| Programmodell | Paketering och förtroende | Testa värdstart | Kör kommando |
|---|---|---|---|
Klassisk UWP (uap10.0) |
paketerad AppContainer | En sidovagn med fullständigt förtroende registrerar paketet och aktiverar appen efter AUMID (Application User Model ID). |
MSBuild med InvokeTestingPlatformmålet |
Modern UWP (.NET 10 med UseUwp) |
Paketerad AppContainer | En sidovagn med fullständigt förtroende registrerar paketet och aktiverar appen av AUMID. |
MSBuild med InvokeTestingPlatformmålet |
| Paketerad WinUI 3 | Fullständigt paketerat förtroende | En sidovagn med fullständigt förtroende registrerar paketet och aktiverar appen av AUMID. |
dotnet run eller dotnet test --project |
| WinUI 3 i opaketerat läge | Ingen paketidentitet, fullständigt förtroende | MTP startar appens körbara fil direkt. |
dotnet run eller dotnet test --project |
WinUI 3 packagedClassicApp med TrustLevel="appContainer" |
Paketerad AppContainer | En sidovagn med fullständigt förtroende aktiverar appen och auktoriserar dess exakta paketsäkerhetsidentifierare (SID) på MTP-kommunikationspipor. |
dotnet msbuild med InvokeTestingPlatform målet |
Paketering och sandboxning är separata val. En paketerad WinUI 3-skrivbordsapp har paketidentitet men körs som en fullständig förtroendeprocess som standard. En UWP-app körs alltid i AppContainer. En paketerad WinUI 3-app körs i AppContainer bara om dess manifest anger TrustLevel="appContainer".
För äldre MSTest- eller MTP-versioner behåller du din befintliga VSTest-konfiguration för UWP-projekt. Inbyggd MTP-körning för UWP- och AppContainer-värdar kräver MSTest 4.5 och MTP 2.5.
Förstå sidovagnen för MTP-appmodellen
För en paketerad app kan den första testverktygsprocessen inte köras i paketet. MSTest.Sdk startar en sidovagnsstyrenhet med fullständigt förtroende som:
- Förbereder kommandoradsargument och ansvarar för avbrott, återförsök, rapportering och hantering av avslutningskoder.
- Registrerar paketet med byggutdata och aktiverar exakt det program som anges i manifestet via AUMID.
- Auktoriserar endast det valda paket-SID:et när en AppContainer-värd ansluter till MTP-namngivna pipes.
- Återställer TRX-, dump-, diagnostik- och återförsöksartefakter från paketägd lagring.
Testprogrammet kör fortfarande MTP och MSTest i en egen process. Körning av UWP kräver inte Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider eller Visual Studios distributionskörmiljö.
För en UWP windowsAppger Windows en aktiveringssträng i LaunchActivatedEventArgs.Arguments stället för normala processargument. Anropa PackagedAppExtensions.GetTestApplicationArguments innan du skapar MTP-byggaren. Tillägget packaged-app återställer den ursprungliga argumentmatrisen och metadata för kontrollantanslutningen.
För ett WinUI 3 packagedClassicApp, inklusive ett som körs i AppContainer, använder du de normala processargumenten.
Uppfylla kraven
Använd de förutsättningar som gäller för projektet:
- Använd .NET SDK 10 eller senare för MSTest 4.5-verktygskedjan och
dotnet test --project. - För UWP använder du MSBuild för skrivbord från Visual Studio med arbetsbelastningen Universell Windows-plattform och det Windows SDK som krävs. Dessa komponenter ger stöd endast vid bygge.
- För WinUI 3 installerar du Windows programutvecklingsverktyg och refererar till en kompatibel Windows App SDK version.
- För paketerade testappar aktiverar du utvecklarläge i Windows eller konfigurerar sidoinläsning så att Windows kan registrera en osignerad layout för byggresultatet.
- För AppContainer-testappar kör du kontrollern som en användare utan förhöjda rättigheter.
Konfigurera UWP-tester
Konfigurera ett modernt UWP-projekt
Använd MSTest.Sdk 4.5 eller senare, rikta in dig på .NET 10 med en Windows-plattformsversion och ställ in UseUwp på true. Behåll dina befintliga UWP XAML-, MSIX-, arkitektur- och interna AOT-inställningar.
Visual Studio aktiverar UseUwpTools normalt under bygget. MSTest.Sdk väljer UWP-programmodellen när UseUwpTools är true, eller när UseUwp är true och UseUwpTools inte har angetts ännu.
Om du bara behöver UWP-referenser i ett MTP-testprogram som inte är UWP anger du UseUwpTools till false. SDK använder sedan den direkta MTP-löparen om inte en annan paketerad programmodell kräver sidovagnen.
Ett komplett projekt finns i det moderna UWP MTP-exemplet.
Konfigurera ett klassiskt UWP-projekt
Behåll den befintliga uap10.0 projektformen, skrivbords-MSBuild-verktygskedjan och UWP-tilläggs-SDK. Importera MSTest.Sdk 4.5 eller senare och aktivera MSTest-löparen och MTP. MSTest.Sdk tillhandahåller UAP-kompatibla bootstrap-, adapter- och körningsresurser.
Ett fullständigt projekt finns i det klassiska UWP MTP-exemplet.
Kör UWP-tester
Öppna en Developer PowerShell för Visual Studio. Skapa lösningen för en konkret arkitektur och anropa sedan MTP:
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"
Det andra kommandot registrerar paketet, aktiverar appen av AUMID, kör vanliga tester och UI-trådtester, kopierar resultatartefakter från paketlagring och returnerar slutkoden för testkörningen.
Konfigurera WinUI 3-tester
Använd MSTest.Sdk 4.5 eller senare, ange UseWinUI som true och använd ett Windows-specifikt målramverk. För paketerad aktivering använder du Windows plattformsversion 10.0.19041.0 eller senare.
Hysa MTP i WinUI-programmet
För en WinUI-testapp med egen värd skapar och aktiverar du testfönstret i OnLaunchedoch publicerar sedan dess dispatcher-kö:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Kör den genererade MTP-hjälpen, tilldela resultatet till Environment.ExitCode, stäng fönstret och anropa Exit:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Används UITestMethod för tester som skapar eller kommer åt WinUI-objekt. Används TestMethod för tester som inte kräver användargränssnittstråden.
Varning
Lägg inte till [assembly: WinUITestTarget(...)] i en WinUI-testapp med egen värd. Det attributet startar ett WinUI-program för en separat testvärd, men den lokalt installerade appen har redan anropat Application.Start.
Konfigurera en opaketerad app
Ställ in WindowsPackageType på None. Appen har ingen MSIX-identitet eller AppxManifest.xml, så MTP startar sin körbara fil direkt. Lägg inte till packaged app-tillägget manuellt.
Windows App SDK injicerar normalt bootstrap-initieraren när projektet uppfyller dessa villkor:
-
WindowsPackageTypeärNone. -
OutputTypeärExeellerWinExe. -
WindowsAppSDKSelfContainedär intetrue.
Om ett värdprogram som inte är en app med Windows App SDK läser in ditt testbibliotek, ställer du in WindowsAppSdkBootstrapInitialize på true i biblioteket.
VSTest stöder inte uppackade WinUI 3-testappar eftersom WinUI-providern kräver ett AppX-manifest.
Ett komplett projekt finns i det opaketerade WinUI MTP-exemplet.
Konfigurera en paketerad app med fullständigt förtroende
Behåll den standardpaketerade WinUI-konfigurationen och dess Package.appxmanifest. MSTest.Sdk refererar till och registrerar Microsoft.Testing.Extensions.PackagedApp automatiskt för det paketerade projektet.
Anropa inte heller AddPackagedAppDeployment. En MTP-körning kan bara registrera en testvärdstartare. Ange EnableMicrosoftTestingExtensionsPackagedApp till false endast när en anpassad launcher äger paketerad aktivering.
Ett fullständigt projekt finns i det paketerade WinUI MTP-exemplet.
Konfigurera en AppContainer-app
I WinUI-paketmanifestet konfigurerar du programmet som packagedClassicApp och anger TrustLevel="appContainer". MTP 2.5 auktoriserar det exakta paket-SID:et på styrenheten och tilläggsrören. Det ger inte ALL APPLICATION PACKAGES och kräver inte ett loopback-undantag.
Kör sidovagnen som inte är upphöjd. Använd målet InvokeTestingPlatform så att sidecar-komponenten kan kopiera resultat och diagnostikdata från paketet LocalState till den begärda resultatkatalogen.
Ett fullständigt projekt finns i AppContainer WinUI MTP-exemplet.
Kör tester för WinUI 3
Bygg för en konkret arkitektur. Kör för en paketerad app med fullständig behörighet eller en opackad app:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
Du kan också använda dotnet run --no-build -p:Platform=x64.
För en AppContainer WinUI-app använder du sidecar-målet och en absolut resultatkatalog:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Använd inte dotnet exec för en WinUI-app. WinUI matchar PRI-resurser utifrån processens sökväg.
Felsök installationen
| Symptom | Kontrollera |
|---|---|
Appen rapporterar flera anrop till Application.Start. |
WinUITestTarget Ta bort attributet från en WinUI-testapp med egen värd. |
| Testkörningen är klar men processen förblir öppen. | Stäng testfönstret och anropa Exit när MTP-körningen har slutförts. |
Misslyckade tester returnerar processens slutkod 0. |
Tilldela MTP-körningsresultatet till Environment.ExitCode. |
En opaketerad WinUI-app rapporterar att AppxManifest.xml saknas. |
Bekräfta att projektet använder MTP i stället för VSTest. |
| En paketerad appkörning kan inte registrera eller aktivera appen. | Kontrollera Windows-målramverket, utvecklarläget eller sideladdningspolicyn, arkitekturen och den körbara posten i manifestet. |
| En AppContainer-värd kan inte ansluta till kontrollanten. | Använd MSTest 4.5 och MTP 2.5 eller senare och kör kontrollanten utan förhöjd behörighet. |
| En AppContainer-rapport kopieras inte till den begärda katalogen. | Använd InvokeTestingPlatform och ange en absolut resultatkatalog. |