Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Microsoft.Testing.Platform (MTP) használatával MSTest-teszteket futtathat UWP- és WinUI 3-alkalmazásokban. Az alkalmazás tesztgazdaként működik, és a felhasználói felület szálát és a folyamat élettartamát birtokolja.
Important
A cikkben ismertetett teljes Windows alkalmazástámogatási mátrix az MSTest 4.5 és az MTP 2.5 használatával érhető el. A stabil verziók kiadásáig használjon egyező 4.5-ös és 2.5-ös előzetes verziós csomagokat. Ha közvetlenül kezeli az MTP-csomagokat, tartsa a platform- és bővítménycsomagok verzióit egymáshoz igazítva.
Alkalmazásmodell kiválasztása
Az MSTest.Sdk az alábbi Windows alkalmazásmodelleket támogatja az MTP-n keresztül:
| Alkalmazásmodell | Csomagolás és megbízhatóság | Gazdagép indításának tesztelése | Parancs futtatása |
|---|---|---|---|
Klasszikus UWP (uap10.0) |
Becsomagolt AppContainer | A teljes megbízhatóságú oldalkocsi regisztrálja a csomagot, és az alkalmazást az alkalmazás felhasználói modellazonosítója (AUMID) alapján aktiválja. |
MSBuild a InvokeTestingPlatform céllal |
Modern UWP (.NET 10-zel és UseUwp) |
Becsomagolt AppContainer | A teljes megbízhatóságú oldalkocsi regisztrálja a csomagot, és aktiválja az alkalmazást az AUMID által. |
MSBuild a(z) InvokeTestingPlatform céllal |
| Becsomagolt WinUI 3 | Csomagolt teljes megbízhatóság | A teljes megbízhatóságú oldalkocsi regisztrálja a csomagot, és aktiválja az alkalmazást az AUMID által. |
dotnet run vagy dotnet test --project |
| Csomagolatlan WinUI 3 | Nincs csomagidentitás, teljes megbízhatóság | Az MTP közvetlenül elindítja a végrehajtható alkalmazást. |
dotnet run vagy dotnet test --project |
WinUI 3 packagedClassicApp és TrustLevel="appContainer" |
Csomagolt AppContainer | A teljes megbízhatóságú segédalkalmazás aktiválja az alkalmazást, és engedélyezi annak pontos csomagbiztonsági azonosítójának (SID) használatát az MTP kommunikációs csatornákon. |
dotnet msbuild a InvokeTestingPlatform céllal |
A csomagolás és a homokozóba zárás különálló döntések. Egy csomagolt WinUI 3 asztali alkalmazás csomagidentitással rendelkezik, de alapértelmezés szerint teljes megbízhatósági folyamatként fut. Az UWP-alkalmazások mindig az AppContainerben futnak. A csomagolt WinUI 3-alkalmazás csak akkor fut AppContainerben, ha a jegyzékfájlja beállítja a TrustLevel="appContainer" elemet.
Régebbi MSTest- vagy MTP-verziók esetén tartsa meg a meglévő VSTest-konfigurációt UWP-projektekhez. Az UWP- és AppContainer-gazdagépek natív MTP-végrehajtásához MSTest 4.5 és MTP 2.5 szükséges.
Az MTP alkalmazásmodell oldalkocsijának ismertetése
Csomagolt alkalmazások esetén a kezdeti teszteszköz-folyamat nem futtatható a csomagon belül. Az MSTest.Sdk elindít egy teljes jogosultságú sidecar-vezérlőt, amely:
- Előkészíti a parancssori argumentumokat, és rendelkezik a lemondással, az újrapróbálkozásokkal, a jelentésekkel és a kilépési kód kezelésével.
- Regisztrálja a buildkimeneti csomagot, és aktiválja az AUMID alapján megadott alkalmazást a jegyzékből.
- Csak a kiválasztott csomag SID-jét engedélyezi, amikor egy AppContainer-gazdaalkalmazás az MTP névvel ellátott csővezetékeihez csatlakozik.
- Helyreállítja a TRX-, memóriakép-, diagnosztikai és újrapróbálkozási fájlokat a csomaghoz tartozó tárolóból.
A tesztalkalmazás továbbra is saját folyamatában üzemelteti az MTP-t és az MSTestet. Az UWP futtatásához nincs szükség Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider vagy a Visual Studio telepítési futtatókörnyezetére.
UWP windowsAppesetén Windows egy aktiválási sztringet LaunchActivatedEventArgs.Arguments biztosít a normál folyamatargumentumok helyett. Hívja meg a PackagedAppExtensions.GetTestApplicationArguments elemet, mielőtt létrehozza az MTP-létrehozót. A csomagolt alkalmazásbővítmény visszaállítja az eredeti argumentumtömböt és a vezérlő kapcsolati metaadatait.
WinUI 3 packagedClassicAppesetén – beleértve az AppContainerben futót is – használja a normál folyamatargumentumokat.
Az előfeltételek teljesítése
Használja a projektre vonatkozó előfeltételeket:
- Használja .NET SDK 10 vagy újabb verzióját az MSTest 4.5 eszközlánchoz és
dotnet test --project. - UWP esetén használja a Visual Studio asztali MSBuild eszközt a Univerzális Windows-platform számítási feladattal és a szükséges Windows SDK-val. Ezek az összetevők csak a buildelési idő támogatását biztosítják.
- WinUI 3 esetén telepítse a Windows alkalmazásfejlesztési eszközöket, és hivatkozzon egy kompatibilis Windows App SDK verzióra.
- Csomagolt tesztalkalmazások esetén engedélyezze a Windows fejlesztői módját, vagy állítsa be az oldalbetöltést, hogy a Windows regisztrálni tudjon egy aláíratlan buildkimeneti elrendezést.
- AppContainer-tesztalkalmazások esetén futtassa a vezérlőt nem emelt szintű felhasználóként.
UWP-tesztek konfigurálása
Modern UWP-projekt konfigurálása
Használja az MSTest.Sdk 4.5-ös vagy újabb verzióját, a Windows platformverzióval célként a .NET 10-et adja meg, és állítsa a UseUwp értékét erre: true. Tartsa meg a meglévő UWP XAML-, MSIX-, architektúra- és natív AOT-beállításait.
Visual Studio általában engedélyezi UseUwpTools a buildelés során. Az MSTest.Sdk kiválasztja az UWP-alkalmazásmodellt, ha UseUwpTools van true, vagy ha UseUwp van true , és UseUwpTools még nincs beállítva.
Ha csak UWP-hivatkozásokra van szüksége egy nem UWP MTP-tesztalkalmazásban, állítsa a(z) UseUwpTools értékét erre: false. Az SDK ezután a közvetlen MTP-futót használja, kivéve, ha egy másik csomagolt alkalmazásmodell megköveteli az oldalkocsit.
A teljes projekthez tekintse meg a modern UWP MTP-mintát.
Klasszikus UWP-projekt konfigurálása
Tartsa meg a meglévő uap10.0 projektalakzatot, az asztali MSBuild eszközláncot és az UWP-bővítmény SDK-t. Importálja az MSTest.Sdk 4.5-ös vagy újabb verzióját, és engedélyezze az MSTest futót és az MTP-t. Az MSTest.Sdk biztosítja az UAP-kompatibilis bootstrap-, adapter- és futtatókörnyezeti eszközöket.
A teljes projekthez tekintse meg a klasszikus UWP MTP-mintát.
UWP-tesztek futtatása
Nyisson meg egy, a Visual Studiohoz készült Fejlesztői PowerShellt. Hozza létre a megoldást egy konkrét architektúrához, majd hívja meg az MTP-t:
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"
A második parancs regisztrálja a csomagot, aktiválja az alkalmazást az AUMID által, futtatja a normál és a felhasználói felületi szál tesztjeit, átmásolja az eredményösszetevőket a csomagtárolóból, és visszaadja a tesztfuttatás kilépési kódját.
WinUI 3-tesztek konfigurálása
Használja az MSTest.Sdk 4.5-ös vagy újabb verzióját, állítsa be UseWinUItrueés célozza meg a Windows-specifikus cél keretrendszert. A csomagolt aktiváláshoz használja Windows platformverziót vagy újabb verziót10.0.19041.0.
MTP üzemeltetése a WinUI-alkalmazásból
Saját üzemeltetésű WinUI-tesztalkalmazás esetén hozza létre és aktiválja a tesztablakot a OnLaunched elemben, majd tegye közzé a diszpécsersorát:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Futtassa a létrehozott MTP-segédprogramot, rendelje az eredményt a(z) Environment.ExitCode-hoz, zárja be az ablakot, és hívja meg a(z) Exit-t:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
WinUI-objektumokat létrehozó vagy elérő tesztekhez használható UITestMethod . Olyan tesztekhez használható TestMethod , amelyekhez nincs szükség a felhasználói felületi szálra.
Warning
Ne adja hozzá a(z) [assembly: WinUITestTarget(...)] elemet egy saját üzemeltetésű WinUI-tesztalkalmazáshoz. Ez az attribútum elindít egy WinUI-alkalmazást egy külön tesztgazda számára, de a saját gazdagépen futó alkalmazás már meghívta a(z) Application.Start elemet.
Csomagolatlan alkalmazás konfigurálása
Állítsa be WindowsPackageType-t None-re. Az alkalmazás nem rendelkezik MSIX-azonosítóval vagy AppxManifest.xml, ezért az MTP közvetlenül indítja el a végrehajtható fájlját. Ne adja hozzá manuálisan a csomagolt alkalmazásbővítményt.
A Windows App SDK általában beszúrja a bootstrap inicializálóját, amikor a projekt megfelel az alábbi feltételeknek:
-
WindowsPackageTypeazNone. -
OutputTypeExevagyWinExe. -
WindowsAppSDKSelfContainednemtrue.
Ha egy olyan hostfolyamat tölti be a tesztkönyvtárat, amely nem Windows App SDK-alkalmazás, állítsa a(z) WindowsAppSdkBootstrapInitialize értékét true értékre a könyvtárban.
A VSTest nem támogatja a csomagolatlan WinUI 3 tesztalkalmazásokat, mert a WinUI-szolgáltatóhoz AppX-jegyzék szükséges.
A teljes projekthez tekintse meg a csomagolatlan WinUI MTP-mintát.
Csomagolt teljes megbízhatóságú alkalmazás konfigurálása
Tartsa meg az alapértelmezett, csomagolt WinUI-konfigurációt és annak Package.appxmanifest. Az MSTest.Sdk automatikusan hivatkozik a(z) Microsoft.Testing.Extensions.PackagedApp elemre, és regisztrálja azt a becsomagolt projekthez.
Ne hívja AddPackagedAppDeployment sem. Egy MTP-futtatás legfeljebb egy tesztgazda-indítót regisztrálhat. A EnableMicrosoftTestingExtensionsPackagedApp értékét csak akkor állítsa false értékre, ha az egyéni indító kezeli a csomagolt aktiválást.
A teljes projektért tekintse meg a csomagolt WinUI MTP-mintát.
AppContainer-alkalmazás konfigurálása
A WinUI-csomagjegyzékben konfigurálja az alkalmazást a következőképpen packagedClassicApp és állítsa be TrustLevel="appContainer". Az MTP 2.5 engedélyezi a csomag sid-jének pontos engedélyezését a vezérlőn és a bővítménycsöveken. Nem ad ALL APPLICATION PACKAGES és nem követel meg loopback-kivételt.
Futtassa az oldalkocsit nem emelt szinten. Használja a InvokeTestingPlatform célt, hogy a sidecar a(z) LocalState csomagból átmásolhassa az eredményeket és a diagnosztikai adatokat a kért eredménykönyvtárba.
A teljes projektért tekintse meg az AppContainer WinUI MTP-mintáját.
WinUI 3-tesztek futtatása
Építs egy konkrét architektúrára. Csomagolt teljes megbízhatóságú vagy csomagolatlan alkalmazás esetén futtassa a következőt:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
A dotnet run --no-build -p:Platform=x64is használható.
AppContainer WinUI-alkalmazás esetén használja a sidecar célt és az eredmények abszolút könyvtárát:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Ne használja dotnet exec WinUI-alkalmazáshoz. A WinUI a PRI-erőforrásokat a folyamat elérési útjához képest keresi meg.
A beállítás hibaelhárítása
| Jelenség | Ellenőriz |
|---|---|
Az alkalmazás több, a(z) Application.Start felé irányuló hívást jelez. |
Távolítsa el az WinUITestTarget attribútumot egy saját üzemeltetésű WinUI-tesztalkalmazásból. |
| A tesztfuttatás befejeződik, de a folyamat nyitva marad. | Zárja be a tesztablakot, és hívja meg Exit az MTP-futtatás befejeződése után. |
A sikertelen tesztek visszaadják a folyamat kilépési kódját 0. |
Az MTP-futtatási eredmény hozzárendelése a következőhöz Environment.ExitCode: . |
Egy nem csomagolt WinUI-futtatás egy AppxManifest.xml hiányát jelzi. |
Ellenőrizze, hogy a projekt a VSTest helyett MTP-t használ-e. |
| A csomagolt futtatás nem tudja regisztrálni vagy aktiválni az alkalmazást. | Ellenőrizze a Windows célkeretrendszert, a Fejlesztői módot vagy az oldalról történő telepítésre vonatkozó szabályzatot, az architektúrát és az alkalmazásjegyzék futtatható fájlra vonatkozó bejegyzését. |
| Az AppContainer-gazdagépek nem tudnak csatlakozni a vezérlőhöz. | Használja az MSTest 4.5-öt és az MTP 2.5-ös vagy újabb verzióját, és futtassa a vezérlőt emelt jogosultságok nélkül. |
| Az AppContainer-jelentések nem lesznek átmásolva a kért könyvtárba. | Használja a(z) InvokeTestingPlatform elemet, és adjon meg egy abszolút eredménykönyvtárat. |