Tesztelje az UWP- és WinUI 3-alkalmazásokat az MSTest és Microsoft használatával. Testing.Platform

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:

  • WindowsPackageType az None.
  • OutputType Exe vagy WinExe.
  • WindowsAppSDKSelfContained nem true.

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.

Lásd még