Otestujte aplikace UPW a WinUI 3 pomocí MSTest a Microsoft. Testing.Platform

Použijte Microsoft. Testing.Platform (MTP) pro spouštění testů MSTest v aplikacích UPW a WinUI 3 Aplikace funguje jako testovací hostitel a řídí své vlákno uživatelského rozhraní i životnost procesu.

Important

Kompletní matice podpory aplikací Windows popsaná v tomto článku je k dispozici s MSTest 4.5 a MTP 2.5. Dokud nebudou vydány stabilní verze, použijte odpovídající balíčky verze 4.5 a 2.5 Preview. Pokud balíčky MTP spravujete přímo, udržujte verze balíčků platformy a rozšíření vzájemně sladěné.

Volba aplikačního modelu

MSTest.Sdk podporuje následující Windows aplikační modely prostřednictvím MTP:

Aplikační model Balení a důvěra Testování spuštění hostitele Spustit příkaz
Klasické UWP (uap10.0) Zabalený AppContainer Sidecar s úplnou důvěrou zaregistruje balíček a aktivuje aplikaci pomocí ID modelu uživatele aplikace (AUMID). MSBuild s cílem InvokeTestingPlatform
Moderní UWP (.NET 10 s UseUwp) Balíčkovaný AppContainer Sidecar s plnou důvěrou zaregistruje balíček a aktivuje aplikaci pomocí AUMID. MSBuilds cílem InvokeTestingPlatform
WinUI 3 v balíčku Zabalená plná důvěra Sidecar s plnou důvěrou zaregistruje balíček a aktivuje aplikaci pomocí AUMID. dotnet run nebo dotnet test --project
Rozbalení WinUI 3 Žádná identita balíčku, plná důvěra MTP spustí spustitelný soubor aplikace přímo. dotnet run nebo dotnet test --project
WinUI 3 packagedClassicApp s TrustLevel="appContainer" Balíčkovaný AppContainer Sidecar komponenta s úplnou důvěrou aktivuje aplikaci a udělí oprávnění jejímu konkrétnímu identifikátoru zabezpečení balíčku (SID) pro komunikační kanály MTP. dotnet msbuild s cílem InvokeTestingPlatform

Balení a sandboxování jsou oddělené volby. Zabalená desktopová aplikace WinUI 3 má identitu balíčku, ale ve výchozím nastavení běží jako plně důvěryhodný proces. Aplikace pro UPW se vždy spouští v AppContaineru. Zabalená aplikace WinUI 3 běží v AppContainer pouze v době, kdy se její manifest nastaví TrustLevel="appContainer".

U starších verzí MSTest nebo MTP ponechte stávající konfiguraci VSTest pro projekty UPW. Nativní spouštění MTP pro hostitele UPW a AppContainer vyžaduje MSTest 4.5 a MTP 2.5.

Pochopte sidecar modelu aplikace MTP

V případě zabalené aplikace nemůže počáteční proces testovacího nástroje běžet uvnitř balíčku. MSTest.Sdk spustí řadič sidecaru s plnou důvěrou, který:

  • Připravuje argumenty příkazového řádku a zajišťuje zrušení, opakované pokusy, hlášení a zpracování ukončovacího kódu.
  • Zaregistruje výstupní balíček sestavení a aktivuje přesnou aplikaci manifestu pomocí AUMID.
  • Autorizuje pouze vybraný identifikátor SID balíčku, když se hostitel AppContainer připojí k pojmenovaným kanálům MTP.
  • Obnoví artefakty TRX, dump, diagnostické artefakty a artefakty opakovaných pokusů z úložiště patřícího balíčku.

Testovací aplikace stále hostuje MTP a MSTest ve vlastním procesu. Spuštění UWP nevyžaduje Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider ani modul runtime pro nasazení sady Visual Studio.

Pro aplikaci UWP windowsApp Windows poskytuje jeden aktivační řetězec prostřednictvím LaunchActivatedEventArgs.Arguments namísto běžných argumentů procesu. Zavolejte PackagedAppExtensions.GetTestApplicationArguments před vytvořením konstruktoru MTP. Rozšíření pro zabalenou aplikaci obnoví původní pole argumentů a metadata o připojení řadiče.

Pro WinUI 3 packagedClassicApp, včetně toho, který běží v AppContainer, použijte normální argumenty procesu.

Splnění požadavků

Použijte požadavky, které platí pro váš projekt:

  • Pro sadu nástrojů MSTest 4.5 a dotnet test --project použijte .NET SDK 10 nebo novější.
  • Pro UWP použijte desktopový MSBuild ze sady Visual Studio s úlohou Univerzální platforma Windows a požadovanou sadou Windows SDK. Tyto komponenty poskytují pouze podporu v době sestavení.
  • Pro WinUI 3 nainstalujte nástroje pro vývoj aplikací pro Windows a odkazujte na kompatibilní verzi sady Windows App SDK.
  • U zabalených testovacích aplikací povolte Režim vývojáře systému Windows nebo nakonfigurujte boční načítání aplikací, aby systém Windows mohl zaregistrovat nepodepsané výstupní rozložení sestavení.
  • U testovacích aplikací AppContainer spusťte řadič jako uživatel bez zvýšených oprávnění.

Konfigurace testů UPW

Konfigurace moderního projektu UPW

Použijte MSTest.Sdk 4.5 nebo novější, cílte na .NET 10 s verzí platformy pro Windows a nastavte UseUwp na true. Zachovejte stávající nastavení UWP XAML, MSIX, architektury a Native AOT.

Visual Studio obvykle povolí UseUwpTools během sestavení. MSTest.Sdk vybere aplikační model UPW, pokud UseUwpTools je true, nebo kdy UseUwp je true a UseUwpTools ještě není nastavený.

Pokud potřebujete reference na UWP pouze v testovací aplikaci MTP, která není UWP, nastavte false na UseUwpTools. SDK pak použije přímý spouštěč MTP, pokud sidecar nevyžaduje jiný balený model aplikace.

Kompletní projekt najdete v moderní ukázce MTP pro UPW.

Konfigurace klasického projektu UPW

Ponechte existující uap10.0 obrazec projektu, sadu nástrojů MSBuild pro stolní počítače a sadu SDK rozšíření UPW. Naimportujte MSTest.Sdk 4.5 nebo novější a povolte MSTest runner a MTP. MSTest.Sdk poskytuje bootstrap, adaptér a prostředky běhového prostředí kompatibilní s UAP.

Kompletní projekt najdete v klasické ukázce MTP pro UPW.

Spouštění testů UPW

Otevřete Vývojářský PowerShell pro Visual Studio. Sestavte řešení pro konkrétní architekturu a pak vyvolejte 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"

Druhý příkaz zaregistruje balíček, aktivuje aplikaci službou AUMID, spustí běžné testy a testy vláken uživatelského rozhraní, zkopíruje artefakty výsledků z úložiště balíčků a vrátí ukončovací kód testovacího spuštění.

Konfigurace testů WinUI 3

Použijte MSTest.Sdk 4.5 nebo novější, nastavte UseWinUI na true a cilte na cílový framework specifický pro Windows. Pro balíčkovou aktivaci použijte verzi platformy Windows 10.0.19041.0 nebo novější.

Hostování MTP z aplikace WinUI

Pro samostatně hostovanou testovací aplikaci WinUI vytvořte a aktivujte testovací okno v OnLaunched a potom publikujte frontu dispatcheru:

_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;

Spusťte vygenerovaný pomocný nástroj MTP, přiřaďte jeho výsledek Environment.ExitCode, zavřete okno a zavolejte Exit:

Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
    Environment.GetCommandLineArgs()[1..]);

Používá se UITestMethod pro testy, které vytvářejí nebo přistupují k objektům WinUI. Používá se TestMethod pro testy, které nevyžadují vlákno uživatelského rozhraní.

Warning

Nepřidávejte [assembly: WinUITestTarget(...)] do testovací aplikace WinUI v místním prostředí. Tento atribut spouští aplikaci WinUI pro samostatného hostitele testů, ale samostatně hostovaná aplikace už zavolala Application.Start.

Konfigurace rozbalené aplikace

Nastavte WindowsPackageType na hodnotu None. Aplikace nemá žádnou identitu MSIX, nebo AppxManifest.xmlproto MTP spustí spustitelný soubor přímo. Nepřidávejte ručně rozšíření pro zabalené aplikace.

Windows App SDK obvykle vloží inicializátor bootstrap, když projekt splňuje tyto podmínky:

  • WindowsPackageType je None.
  • OutputType je Exe nebo WinExe.
  • WindowsAppSDKSelfContained není true.

Pokud hostitel, který není aplikací sady Windows App SDK, načte vaši testovací knihovnu, nastavte v knihovně WindowsAppSdkBootstrapInitialize na true.

VSTest nepodporuje rozbalené testovací aplikace WinUI 3, protože jeho poskytovatel WinUI vyžaduje manifest AppX.

Úplný projekt najdete v rozbalené ukázce WinUI MTP.

Nakonfigurujte zabalenou aplikaci s úplnou důvěrou

Ponechte výchozí balíčkovanou konfiguraci WinUI a její Package.appxmanifest. MSTest.Sdk automaticky odkazuje na Microsoft.Testing.Extensions.PackagedApp a registruje ho pro projekt v balíčku.

Také nevolejte AddPackagedAppDeployment. V rámci jednoho běhu MTP lze zaregistrovat pouze jeden spouštěč hostitele testu. Nastavte EnableMicrosoftTestingExtensionsPackagedApp na false pouze když vlastní spouštěč spravuje aktivaci balené aplikace.

Kompletní projekt najdete v zabalené ukázce WinUI MTP.

Konfigurace aplikace AppContainer

V manifestu balíčku WinUI nakonfigurujte aplikaci jako packagedClassicApp a nastavte TrustLevel="appContainer". MTP 2.5 autorizuje přesný identifikátor SID balíčku na řídicím a rozšiřujícím potrubí. Neuděluje ALL APPLICATION PACKAGES ani nevyžaduje výjimku pro loopback.

Spusťte sidecar bez elevovaných oprávnění. Použijte cíl InvokeTestingPlatform, aby sidecar mohl z balíčku LocalState zkopírovat výsledky a diagnostické informace do požadovaného adresáře s výsledky.

Kompletní projekt najdete v ukázce AppContainer WinUI MTP.

Spuštění testů WinUI 3

Sestavte pro konkrétní architekturu. Pro zabalenou aplikaci s plnou důvěrou nebo nezabalenou aplikaci spusťte:

dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64

Můžete také použít dotnet run --no-build -p:Platform=x64.

Pro aplikaci AppContainer WinUI použijte cíl sajdkáře a adresář absolutních výsledků:

dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"

Nepoužívejte dotnet exec pro aplikaci WinUI. WinUI vyhodnocuje prostředky PRI relativně k cestě procesu.

Řešení potíží s nastavením

Symptom Zkontrolovat
Aplikace hlásí několik volání na Application.Start. Odeberte atribut WinUITestTarget z testovací aplikace WinUI s vlastním hostováním.
Testovací běh se dokončí, ale proces zůstane otevřený. Zavřete testovací okno a po dokončení spuštění MTP zavolejte Exit .
Neúspěšné testy vrací ukončovací kód 0procesu . Přiřaďte výsledek běhu MTP k Environment.ExitCode.
Při spuštění nebalené aplikace WinUI se hlásí chybějící AppxManifest.xml. Ověřte, že projekt místo VSTest používá MTP.
Zabalené spuštění nemůže zaregistrovat nebo aktivovat aplikaci. Potvrďte cílový framework systému Windows, režim vývojáře nebo zásady bočního načítání aplikací, architekturu a položku spustitelného souboru v manifestu.
Hostitel AppContainer se nemůže připojit k řadiči. Použijte MSTest 4.5 a MTP 2.5 nebo novější a spusťte kontroler bez zvýšených oprávnění.
Výkaz AppContainer se nezkopíruje do požadovaného adresáře. Použijte InvokeTestingPlatform a zadejte adresář absolutních výsledků.

Viz také