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.
Használja a Microsoft. A Testing.Platform (MTP) használatával MSTest-teszteket futtathat egy WinUI 3-alkalmazáson belül. A WinUI-alkalmazás tesztgazdaként működik. Az alkalmazás belépési pontjának, a felhasználói felületi szálnak és a folyamat élettartamának tulajdonosa.
Válasszon két WinUI 3-üzemi modell közül:
- A csomagolatlan alkalmazások normál Windows végrehajthatóként futnak.
- A csomagolt teljes megbízhatósági alkalmazás megőrzi az MSIX-csomag identitását, és a kísérleti
Microsoft.Testing.Extensions.PackagedAppbővítmény használatával regisztrálja és aktiválja a teszt gazdagépet.
Important
A csomagolt alkalmazásbővítmény támogatja a teljes megbízhatóságú, csomagolt asztali alkalmazásokat. Nem támogatja az UWP-t vagy más AppContainer-teszt gazdagépeket.
A csomagolt teljes megbízhatóságú AUMID-aktiválás implementálva van az microsoft/testfx adattárban, de 2026. augusztus 6-ától nem érhető el nyilvános NuGet-csomagban. Az aktuális 1.0.0-alpha csomagok nem tartalmazzák a Windows-specifikus aktiválási implementációt. A csomagolt telepítést csak akkor használja, ha egy csomagkiadás azonosítja a teljes megbízhatóságú MSIX-regisztráció és az AUMID aktiválás támogatását.
Üzembehelyezési modell kiválasztása
A tesztprojekt konfigurálása előtt válassza ki az üzembehelyezési modellt.
| Követelmény | Válassz | Gazdagép indításának tesztelése |
|---|---|---|
| A tesztekhez nem szükséges csomagidentitás vagy a csomagidentitást igénylő API-k. | Csomagolatlan | Az MTP közvetlenül elindítja a végrehajtható alkalmazást. |
| A tesztekhez MSIX-csomagdentitásra vagy csomagolt alkalmazás viselkedésére van szükség. | Csomagolt teljes megbízhatóság, miután az MTP előzetes verziója nyilvánosan elérhetővé válik | A csomagolt alkalmazásbővítmény regisztrálja a build kimenetét, és az alkalmazást az alkalmazás felhasználói modellazonosítója (AUMID) alapján aktiválja. |
| A teszteknek az UWP-ben vagy egy másik AppContainerben kell futniuk. | VSTest | Az MTP csomagolt alkalmazásbővítmény nem támogatja az AppContainer elkülönítését. |
Ha a tesztek nem igényelnek csomagdentitást, használjon csomagolatlan alkalmazást. A csomagolatlan modell nem igényel csomagregisztrációt, fejlesztői módot vagy kísérleti csomagolt alkalmazásbővítményt.
Amíg egy nyilvános MTP-előzetes verzió nem tartalmaz teljes megbízhatóságú MSIX-regisztrációt és AUMID-aktiválást, használja a VSTestet a teljes megbízhatóságú WinUI 3-tesztekhez.
Az UWP-határ ismertetése
Ne kezelje az UWP-t egy másik csomagolt WinUI 3-modellként. Mind a klasszikus UWP-projektek, amelyek UAP 10-et és modern .NET AppContainerben futó UWP-projekteket UseUwp céloznak true meg. A WinUI 3 asztali alkalmazás csomagolása nem helyezi el az alkalmazásmodellben.
A VSTest használata klasszikus UWP- és modern .NET UWP-tesztekhez. Az MTP csomagolt alkalmazásindítója teljes megbízhatóságú, csomagolt asztali gazdagépeket céloz meg. Nem tudja kézbesíteni az aktiválási argumentumokat vagy a vezérlőkapcsolatot egy AppContainer-gazdagépnek.
A modern .NET UWP-konfigurációért tekintse meg az MSTest .NET 9 UWP-mintát.
A WinUI-tesztgazda konfigurálása
Mindkét üzemi modell ugyanazt a saját üzemeltetésű MTP-beállítást használja.
A közös projekttulajdonságok beállítása
Állítsa be ezeket a tulajdonságokat a WinUI-tesztprojektben:
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
<UseWinUI>true</UseWinUI>
<EnableMSTestRunner>true</EnableMSTestRunner>
<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>
Használja .NET 8 vagy újabb támogatott .NET verziót. A példa Windows platformverziót 10.0.19041.0célozza meg. A csomagolt alkalmazásbővítményhez ehhez a verzióhoz vagy újabb verzióra van szükség.
Tartsa meg a tesztalkalmazás XAML-fájljára ható WinUI-elemet ApplicationDefinition . A WinUI létrehoz egy belépési pontot az adott elemből. Ha meg szeretné akadályozni, hogy az MTP második belépési pontot hozzon létre, állítsa a következőre GenerateTestingPlatformEntryPointfalse: .
Adjon hozzá csomaghivatkozásokat az MSTest és Microsoft aktuális kompatibilis verzióihoz. WindowsAppSDK.
MTP gazdagép az alkalmazásból
Felülbírálás OnLaunched a WinUI Application osztályban. Hozza létre és aktiválja a tesztablakot, majd tegye közzé a kézbesítői üzenetsort:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Hozzáadás using Microsoft.VisualStudio.TestTools.UnitTesting.AppContainer; a következőhöz UITestMethodAttribute: .
Hozza létre az MTP-alkalmazást a parancssori argumentumokból. Ezután regisztrálja az MSBuild által közreműködő bővítményeket:
string[] cliArgs = Environment.GetCommandLineArgs().Skip(1)
.Where(arg => !arg.Contains("EnableMSTestRunner")).ToArray();
ITestApplicationBuilder builder = await TestApplication.CreateBuilderAsync(cliArgs);
builder.AddSelfRegisteredExtensions(cliArgs);
using ITestApplication app = await builder.BuildAsync();
Hozzáadás using Microsoft.Testing.Platform.Builder; az MTP-szerkesztőtípusokhoz. A WinUI-build hozzáadja EnableMSTestRunner a folyamatargumentumokat. Mivel ez nem MTP parancssori lehetőség, távolítsa el a tesztalkalmazás létrehozása előtt.
A projekt letiltja a létrehozott MTP belépési pontot, ezért hívja meg AddSelfRegisteredExtensions. A csomagolt alkalmazások esetében a metódus a indítót is regisztrálja Microsoft.Testing.Extensions.PackagedApp .
Ebben OnLauncheda lépésben helyezze el a tesztalkalmazás létrehozását és végrehajtását egy try blokkban. Az eredmény hozzárendelése await app.RunAsync() a következőhöz Environment.ExitCode: .
finally Egy blokkban zárja be az ablakot, és hívja meg az alkalmazás metódusátExit.
Az életciklus lépései két garanciát nyújtanak:
- A folyamat visszaadja az MTP kilépési kódját, így egy sikertelen teszt egy nemzero folyamat kilépési kódját állítja elő.
- A WinUI üzenethurok a futtatás után leáll ahelyett, hogy a tesztfolyamat aktív maradna.
Warning
Ne vegyen fel [assembly: WinUITestTarget(...)] saját üzemeltetésű WinUI-tesztalkalmazást. Az attribútum elindít egy WinUI-alkalmazást egy külön tesztgazda számára. Először egy saját üzemeltetésű alkalmazás hív meg Application.Start . Az attribútum ezután megpróbál elindítani egy második alkalmazást ugyanabban a folyamatban.
A teljes megvalósításért tekintse meg a csomagolatlan WinUI-mintát és a csomagolt WinUI-mintát.
Tesztek futtatása a felhasználói felületi szálon
WinUI-objektumokat létrehozó vagy elérő teszthez használható UITestMethod . Az MSTest ütemezi a tesztet a diszpécseri üzenetsoron, amelyet a rendszer hozzárendelt.OnLaunched
[UITestMethod]
public void CreatesControlOnUiThread()
{
var grid = new Grid();
Assert.IsTrue(grid.DispatcherQueue.HasThreadAccess);
}
A rendszeresek TestMethod nem futnak a WinUI-diszpécseri üzenetsoron. Olyan tesztekhez használja, amelyekhez nincs szükség felhasználói felületi szálra.
Csomagolatlan tesztalkalmazás konfigurálása
Csomagolatlan alkalmazás esetén adja hozzá az alábbi tulajdonságokat:
<WindowsPackageType>None</WindowsPackageType>
<EnableMsixTooling>false</EnableMsixTooling>
Ne hivatkozzon rá Microsoft.Testing.Extensions.PackagedApp. A csomagolatlan alkalmazás nem rendelkezik MSIX-identitással vagy AppxManifest.xml kimenettel, így az MTP közvetlenül elindíthatja a végrehajtható alkalmazást.
Alapértelmezés szerint a Windows App SDK a rendszerindító inicializálóját adja meg, amikor a projekt megfelel az alábbi feltételeknek:
-
WindowsPackageTypeazNone. -
OutputTypeExevagyWinExe. -
WindowsAppSDKSelfContainednemtrue.
Ha egy gazdagép, amely nem Windows App SDK alkalmazás, betölti a teszttárat, állítsa be WindowsAppSdkBootstrapInitializetrue a tárba.
Note
A VSTest nem támogatja ezt a csomagolatlan WinUI-konfigurációt. Futtassa a projektet az MTP-vel.
Csomagolt teljes megbízhatóságú tesztalkalmazás konfigurálása
Tartsa meg az alapértelmezett csomagolt WinUI-konfigurációt:
- Ne állítsa be a
WindowsPackageType-tNone-re. - Tartsa és
Package.appxmanifestcsomagolja az eszközöket a projektben. - Állítsa be
EnableMsixTooling, hogytruea projekt az egyprojektes MSIX csomagolóeszközöket használja-e.
Miután elérhetővé válik egy teljes megbízhatóságú MSIX-regisztrációt és AUMID-aktiválást tartalmazó előzetes verzió, adja hozzá a Microsoft adott verzióját. Testing.Extensions.PackagedApp csomag. Ehhez a beállításhoz ne használjon korábbi 1.0.0-alpha csomagot.
A csomag MSBuild kellékei regisztrálják a indítót.AddSelfRegisteredExtensions Ne is hívjon AddPackagedAppDeployment. Az MTP-futtatás csak egy teszt gazdagépindítót regisztrálhat.
A indító a következő műveleteket hajtja végre:
- A futtatható teszt leírását tartalmazó fájlt keres
AppxManifest.xml. - Regisztrálja a buildkimeneti elrendezést Windows.
- Feloldja az alkalmazás AUMID azonosítóját a regisztrált csomagból és a jegyzékalkalmazás-azonosítóból.
- Az AUMID aktiválja az alkalmazást, és csatlakoztatja az aktivált folyamatot az MTP-vezérlőhöz.
A indító figyelmen kívül hagy egy nem kapcsolódó jegyzékfájlt egy elődkönyvtárban, kivéve, ha egy Application bejegyzés a végrehajtható tesztre mutat. A csomagra közvetetten hivatkozó csomagolatlan alkalmazás a közvetlen indítási útvonalon marad.
A csomagolt tesztalkalmazás futtatása előtt az alábbi követelményeknek kell megfelelnie:
- Használjon Windows-specifikus cél keretrendszert platformverzióval vagy újabb verzióval
10.0.19041.0. - A nem aláírt buildkimeneti elrendezés regisztrálásához engedélyezze a fejlesztői módot, vagy konfigurálja az oldalbetöltést.
- Használjon teljes megbízhatóságú, csomagolt asztali alkalmazást. A bővítmény nem támogatja az UWP-t vagy más AppContainer-gazdagépeket.
Figyelmeztetés
Microsoft.Testing.Extensions.PackagedApp és a kiterjesztési ITestHostLauncher pont kísérleti jellegű. A jövőbeli kiadások megváltoztathatják vagy eltávolíthatják az API-kat és a viselkedésüket. A csomagolt modell éles tesztinfrastruktúrabeli használata előtt értékelje ki a kockázatokat.
A tesztek futtatása
A WinUI-tesztprojektet tartalmazó könyvtárban futtassa a következőt:
dotnet run
A projekt megadásához használja a következőt dotnet run --project .\WinUITests.csproj: .
Csomagolatlan alkalmazások esetén az MTP közvetlenül elindítja a végrehajtható alkalmazást. Csomagolt alkalmazások esetén a packaged-app launcher regisztrálja az elrendezést, és aktiválja az alkalmazást az AUMID által.
Mindkét modellben megnyílik a tesztablak, az MTP futtatja a teszteket, és bezárul az ablak. A terminál ezután jelenti a teszt összegzését. Sikeres futtatási kilépés kóddal 0. Ha egy teszt sikertelen, OnLaunched a nonzero RunAsync eredményt rendeli hozzá Environment.ExitCode.
Bármelyik modellhez használható dotnet run . Ha közvetlenül szeretne futtatni egy kicsomagolt alkalmazást, használja a létrehozott végrehajtható alkalmazást. Ne használja, dotnet exec mert a WinUI a folyamat útvonalához képest feloldja a PRI-erőforrásokat.
A beállítás hibaelhárítása
Használja az alábbi ellenőrzéseket a leggyakoribb beállítási hibák esetén:
| Jelenség | Ellenőriz |
|---|---|
Az alkalmazás több hívásról Application.Startis jelentést készít. |
Távolítsa el az WinUITestTarget attribútumot a saját üzemeltetésű tesztalkalmazásból. |
| A tesztfuttatás befejeződik, de a folyamat nyitva marad. | Zárja be a tesztablakot, és hívja Exit meg a blokkot finally a következő után RunAsync: . |
A sikertelen tesztek továbbra is visszaadják a folyamat kilépési kódját 0. |
Az eredmény hozzárendelése RunAsync a következőhöz Environment.ExitCode: . |
A csomagolatlan futtatás meghiúsul, mert AppxManifest.xml hiányzik. |
Győződjön meg arról, hogy a projekt engedélyezi az MTP-t, és hogy a futtatás nem használja a VSTestet. |
| A csomagolt futtatás nem tudja regisztrálni vagy aktiválni az alkalmazást. | Ellenőrizze a Windows-specifikus cél-keretrendszert, a fejlesztői módot vagy az oldalbetöltési konfigurációt, a teljes megbízhatóságú alkalmazásmodellt és a jegyzékbeli végrehajtható bejegyzést. |