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

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.PackagedApp bő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:

  • WindowsPackageType az None.
  • OutputType Exevagy WinExe .
  • WindowsAppSDKSelfContained nem true.

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-t None-re.
  • Tartsa és Package.appxmanifest csomagolja az eszközöket a projektben.
  • Állítsa be EnableMsixTooling , hogy true a 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:

  1. A futtatható teszt leírását tartalmazó fájlt keres AppxManifest.xml .
  2. Regisztrálja a buildkimeneti elrendezést Windows.
  3. Feloldja az alkalmazás AUMID azonosítóját a regisztrált csomagból és a jegyzékalkalmazás-azonosítóból.
  4. 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óval10.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.

Lásd még