Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj Microsoft. Testing.Platform (MTP) do uruchamiania testów MSTest w aplikacjach platformy UWP i WinUI 3. Aplikacja pełni funkcję hosta testów oraz zarządza własnym wątkiem interfejsu użytkownika i cyklem życia procesu.
Ważna
Kompletna macierz obsługi aplikacji Windows opisana w tym artykule jest dostępna w usługach MSTest 4.5 i MTP 2.5. Do momentu wydania stabilnych wersji użyj pasujących pakietów 4.5 i 2.5 w wersji zapoznawczej. Jeśli zarządzasz pakietami MTP bezpośrednio, utrzymuj zgodność wersji pakietów platformy i pakietów rozszerzeń.
Wybieranie modelu aplikacji
Zestaw MSTest.Sdk obsługuje następujące modele aplikacji Windows za pośrednictwem protokołu MTP:
| Model aplikacji | Pakowanie i zaufanie | Uruchamianie hosta testowego | Uruchom komendę |
|---|---|---|---|
Klasyczna platforma UWP (uap10.0) |
Spakowany AppContainer | Sidecar z pełnym zaufaniem rejestruje pakiet i aktywuje aplikację za pomocą identyfikatora AUMID. |
MSBuild z docelowym elementem InvokeTestingPlatform |
Nowoczesna platforma UWP (.NET 10 z UseUwp) |
Spakietowany AppContainer | Sidecar z pełnym poziomem zaufania rejestruje pakiet i aktywuje aplikację przy użyciu identyfikatora AUMID. |
MSBuild z docelowym elementem InvokeTestingPlatform |
| Pakietowa aplikacja WinUI 3 | Spakowane pełne zaufanie | Sidecar z pełnym zaufaniem rejestruje pakiet i aktywuje aplikację przy użyciu identyfikatora AUMID. |
dotnet run lub dotnet test --project |
| Rozpakowany pakiet WinUI 3 | Brak tożsamości pakietu, pełne zaufanie | MTP uruchamia plik wykonywalny aplikacji bezpośrednio. |
dotnet run lub dotnet test --project |
WinUI 3 packagedClassicApp z TrustLevel="appContainer" |
Spakowany kontener AppContainer | Przyczepka o pełnym zaufaniu aktywuje aplikację i autoryzuje dokładny identyfikator zabezpieczeń pakietu (SID) w potokach komunikacji MTP. |
dotnet msbuild z docelowym elementem InvokeTestingPlatform |
Pakietowanie i piaskownicowanie to oddzielne wybory. Spakietowana aplikacja klasyczna WinUI 3 ma tożsamość pakietu, ale domyślnie działa jako proces o pełnym zaufaniu. Aplikacja UWP jest zawsze uruchamiana w kontenerze AppContainer. Spakowana aplikacja WinUI 3 działa w aplikacji AppContainer tylko wtedy, gdy jego manifest ustawia wartość TrustLevel="appContainer".
W przypadku starszych wersji MSTest lub MTP zachowaj istniejącą konfigurację programu VSTest dla projektów platformy UWP. Natywne wykonywanie MTP dla hostów platform UWP i AppContainer wymaga bibliotek MSTest 4.5 i MTP 2.5.
Omówienie przyczepki modelu aplikacji MTP
W przypadku spakowanej aplikacji początkowy proces narzędzia testowego nie może zostać uruchomiony wewnątrz pakietu. Zestaw MSTest.Sdk uruchamia kontroler przyczepki o pełnym zaufaniu, który:
- Przygotowuje argumenty wiersza polecenia oraz odpowiada za anulowanie, ponawianie prób, raportowanie i obsługę kodu wyjścia.
- Rejestruje wyjściowy pakiet kompilacji i aktywuje aplikację określoną w manifeście przy użyciu identyfikatora AUMID.
- Autoryzuje wyłącznie identyfikator SID wybranego pakietu, gdy host AppContainer łączy się z nazwanymi potokami MTP.
- Odzyskuje trX, zrzut, diagnostykę i ponawianie artefaktów z magazynu należącego do pakietu.
Aplikacja testowa nadal hostuje MTP i MSTest we własnym procesie. Uruchamianie aplikacji UWP nie wymaga Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider ani środowiska uruchomieniowego wdrażania programu Visual Studio.
W przypadku platformy UWP windowsAppWindows udostępnia jeden ciąg aktywacji za pomocą LaunchActivatedEventArgs.Arguments zamiast zwykłych argumentów procesu. Wywołaj PackagedAppExtensions.GetTestApplicationArguments, zanim utworzysz kreator MTP. Rozszerzenie packaged-app przywraca oryginalną tablicę argumentów i metadane połączenia kontrolera.
W przypadku aplikacji WinUI 3 packagedClassicApp, w tym takiej, która działa w AppContainer, użyj standardowych argumentów procesu.
Spełnianie wymagań wstępnych
Użyj wymagań wstępnych, które mają zastosowanie do projektu:
- Użyj zestawu .NET SDK 10 lub nowszego dla łańcucha narzędzi MSTest 4.5 i
dotnet test --project. - W przypadku platformy UWP użyj desktopowego narzędzia MSBuild z programu Visual Studio z pakietem roboczym platforma uniwersalna systemu Windows oraz wymaganym zestawem Windows SDK. Te komponenty zapewniają obsługę wyłącznie na etapie kompilacji.
- W przypadku interfejsu WinUI 3 zainstaluj narzędzia deweloperskie aplikacji Windows i zapoznaj się z zgodną wersją Zestaw SDK do aplikacji systemu Windows.
- W przypadku spakowanych aplikacji testowych włącz tryb dewelopera Windows lub skonfiguruj ładowanie bezpośrednie, aby Windows mógł zarejestrować niepodpisany układ danych wyjściowych kompilacji.
- W przypadku testowych aplikacji AppContainer uruchom kontroler jako użytkownik bez podwyższonych uprawnień.
Konfigurowanie testów platformy UWP
Konfigurowanie nowoczesnego projektu platformy UWP
Użyj pakietu MSTest.Sdk 4.5 lub nowszego, ukierunkuj projekt na platformę .NET 10 z wersją platformy Windows i ustaw UseUwp na true. Zachowaj istniejące ustawienia XAML, MSIX, architektury i natywnej AOT platformy UWP.
Visual Studio zwykle włącza UseUwpTools podczas kompilacji. MSTest.Sdk wybiera model aplikacji UWP, gdy UseUwpTools ma wartość true, lub gdy UseUwp ma wartość true, a UseUwpTools nie zostało jeszcze ustawione.
Jeśli potrzebujesz tylko odwołań do UWP w aplikacji testowej MTP niebędącej aplikacją UWP, ustaw UseUwpTools na wartość false. Zestaw SDK używa następnie bezpośredniego modułu uruchamiającego MTP, chyba że inny spakowany model aplikacji wymaga przyczepki.
Aby zapoznać się z kompletnym projektem, zobacz przykład nowoczesnego MTP platformy UWP.
Konfigurowanie klasycznego projektu platformy UWP
Zachowaj istniejący uap10.0 kształt projektu, łańcuch narzędzi MSBuild dla komputerów stacjonarnych i zestaw SDK rozszerzenia platformy UWP. Zaimportuj zestaw MSTest.Sdk 4.5 lub nowszy i włącz moduł uruchamiający MSTest i MTP. MSTest.Sdk dostarcza zgodny z UAP program rozruchowy, adapter i składniki środowiska uruchomieniowego.
Pełny projekt można znaleźć w klasycznym przykładzie MTP platformy UWP.
Uruchamianie testów platformy UWP
Otwórz program PowerShell dla deweloperów dla Visual Studio. Skompiluj rozwiązanie dla określonej architektury, a następnie wywołaj 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"
Drugie polecenie rejestruje pakiet, aktywuje aplikację przy użyciu identyfikatora AUMID, uruchamia zwykłe testy oraz testy w wątku interfejsu użytkownika, kopiuje artefakty wyników z magazynu pakietu i zwraca kod zakończenia uruchomienia testów.
Konfigurowanie testów WinUI 3
Użyj MSTest.Sdk w wersji 4.5 lub nowszej, ustaw UseWinUI na true i użyj platformy docelowej specyficznej dla systemu Windows. W przypadku aktywacji pakietowej użyj platformy Windows w wersji 10.0.19041.0 lub nowszej.
Hostowanie protokołu MTP z aplikacji WinUI
W przypadku samodzielnie hostowanej aplikacji testowej WinUI utwórz i aktywuj okno testowe w pliku OnLaunched, a następnie opublikuj kolejkę dyspozytora:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Uruchom wygenerowany pomocnik MTP, przypisz jego wynik do Environment.ExitCode, zamknij okno i wywołaj polecenie Exit:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Użyj UITestMethod w testach, które tworzą obiekty WinUI lub uzyskują do nich dostęp. Użyj TestMethod do testów, które nie wymagają wątku interfejsu użytkownika.
Warning
Nie należy dodawać [assembly: WinUITestTarget(...)] do własnej aplikacji testowej WinUI. Ten atrybut uruchamia aplikację WinUI dla osobnego hosta testowego, ale aplikacja hostowana samodzielnie już wywołała Application.Start.
Konfigurowanie niezapakowanej aplikacji
Ustaw opcję WindowsPackageType na None. Aplikacja nie ma tożsamości MSIX lub AppxManifest.xml, więc MTP uruchamia plik wykonywalny bezpośrednio. Nie dodawaj ręcznie spakowanego rozszerzenia aplikacji.
Zestaw SDK do aplikacji systemu Windows zwykle wprowadza inicjator bootstrap, gdy projekt spełnia następujące warunki:
- Parametr
WindowsPackageTypema wartośćNone. -
OutputTypejestExelubWinExe. -
WindowsAppSDKSelfContainednie jesttrue.
Jeśli host, który nie jest aplikacją Zestaw SDK do aplikacji systemu Windows, ładuje bibliotekę testową, ustaw w bibliotece parametr WindowsAppSdkBootstrapInitialize na true.
Narzędzie VSTest nie obsługuje rozpakowanych aplikacji testowych WinUI 3, ponieważ jego dostawca WinUI wymaga manifestu AppX.
Pełny projekt znajdziesz w przykładzie niepakietowanej aplikacji WinUI MTP.
Konfigurowanie spakowanej aplikacji o pełnym zaufaniu
Zachowaj domyślną pakietową konfigurację WinUI i jej Package.appxmanifest. MSTest.Sdk automatycznie dodaje odwołanie do Microsoft.Testing.Extensions.PackagedApp i rejestruje je dla spakowanego projektu.
Nie wywołuj również AddPackagedAppDeployment. Uruchomienie MTP może zarejestrować tylko jeden program uruchamiający host testowy. Ustaw EnableMicrosoftTestingExtensionsPackagedApp na false tylko wtedy, gdy niestandardowy program uruchamiający obsługuje aktywację pakietową.
Aby zapoznać się z kompletnym projektem, zobacz spakowany przykład WinUI MTP.
Konfigurowanie aplikacji AppContainer
W manifeście pakietu WinUI skonfiguruj aplikację jako packagedClassicApp i ustaw wartość TrustLevel="appContainer". MTP 2.5 autoryzuje dokładny identyfikator SID pakietu w potokach kontrolera i rozszerzenia. Nie udostępnia ALL APPLICATION PACKAGES ani nie wymaga wyjątku loopback.
Uruchom przyczepkę bez podwyższonego poziomu. Użyj celu InvokeTestingPlatform, aby sidecar mógł skopiować wyniki i dane diagnostyczne z pakietu LocalState do żądanego katalogu wyników.
Kompletny projekt można znaleźć w przykładzie AppContainer WinUI MTP.
Uruchamianie testów WinUI 3
Twórz pod kątem konkretnej architektury. W przypadku spakowanej aplikacji o pełnym zaufaniu lub niespakowanej aplikacji uruchom:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
Możesz również użyć dotnet run --no-build -p:Platform=x64.
W przypadku aplikacji AppContainer WinUI użyj elementu docelowego przyczepki i katalogu wyników bezwzględnych:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Nie używaj dotnet exec w aplikacji WinUI. WinUI lokalizuje zasoby PRI względem ścieżki procesu.
Rozwiązywanie problemów z konfiguracją
| Objaw | Sprawdź |
|---|---|
Aplikacja raportuje wiele wywołań do Application.Start. |
WinUITestTarget Usuń atrybut z własnej aplikacji testowej WinUI. |
| Przebieg testu kończy się, ale proces pozostaje otwarty. | Zamknij okno testowe i wywołaj Exit po zakończeniu przebiegu MTP. |
Nieudane testy zwracają kod 0zakończenia procesu. |
Przypisz wynik działania MTP do Environment.ExitCode. |
Uruchomienie WinUI bez pakietu zgłasza brak elementu AppxManifest.xml. |
Upewnij się, że projekt używa protokołu MTP zamiast vsTest. |
| Aplikacja uruchomiona jako pakiet nie może się zarejestrować ani aktywować. | Potwierdź docelową platformę Windows, tryb dewelopera lub zasady instalacji aplikacji spoza Sklepu, architekturę oraz wpis manifestu dotyczący pliku wykonywalnego. |
| Host aplikacji AppContainer nie może nawiązać połączenia z kontrolerem. | Użyj MSTest 4.5 i MTP 2.5 lub nowszej wersji oraz uruchom kontroler bez podwyższonych uprawnień. |
| Raport AppContainer nie jest kopiowany do żądanego katalogu. | Użyj InvokeTestingPlatform i określ bezwzględny katalog wyników. |