Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте Microsoft. Testing.Platform (MTP) для запуска тестов MSTest в приложениях UWP и WinUI 3. Приложение выступает в качестве тестового узла и владеет потоком пользовательского интерфейса и временем существования процесса.
Important
Полная матрица поддержки приложений Windows, описанная в этой статье, доступна в версиях MSTest 4.5 и MTP 2.5. До выпуска стабильных версий используйте соответствующие пакеты предварительной версии 4.5 и 2.5. Если вы управляете пакетами MTP напрямую, сохраняйте соответствие версий пакетов платформы и расширений.
Выбор модели приложения
MSTest.Sdk поддерживает следующие модели приложений Windows с помощью MTP:
| Модель приложения | Упаковка и доверие | Запуск тестового узла | Выполнение команд |
|---|---|---|---|
Классический UWP (uap10.0) |
Упакованный AppContainer | Полнонадежный боковой автомобиль регистрирует пакет и активирует приложение с помощью идентификатора пользовательской модели приложения (AUMID). |
MSBuild с целевым объектом InvokeTestingPlatform |
Современный UWP (.NET 10 с UseUwp) |
Упакованный AppContainer | Полный доверия боковой автомобиль регистрирует пакет и активирует приложение по AUMID. |
MSBuild с целевым InvokeTestingPlatform объектом |
| WinUI 3 в пакете | Упакованое полное доверие | Полный доверия боковой автомобиль регистрирует пакет и активирует приложение по AUMID. |
dotnet run или dotnet test --project |
| Распаковка WinUI 3 | Без идентификатора пакета, полное доверие | MTP запускает исполняемый файл приложения напрямую. |
dotnet run или dotnet test --project |
WinUI 3 packagedClassicApp с TrustLevel="appContainer" |
Пакетизированный AppContainer | Вспомогательный компонент с полным доверием активирует приложение и авторизует его конкретный идентификатор безопасности пакета (SID) для каналов связи MTP. |
dotnet msbuild с целевым InvokeTestingPlatform объектом |
Упаковка и песочница — это отдельные варианты. Упакованное настольное приложение WinUI 3 имеет идентификатор пакета, но по умолчанию запускается как полностью доверенный процесс. Приложение UWP всегда выполняется в AppContainer. Упакованное приложение WinUI 3 выполняется в AppContainer, только если в его манифесте задано TrustLevel="appContainer".
Для старых версий MSTest или MTP сохраните существующую конфигурацию VSTest для проектов UWP. Для собственного выполнения MTP для узлов UWP и AppContainer требуется MSTest 4.5 и MTP 2.5.
Общие сведения о боковой машине модели приложений MTP
Для упаковаемого приложения начальный процесс средства тестирования не может выполняться внутри пакета. MSTest.Sdk запускает sidecar-контроллер с полными привилегиями, который:
- Подготавливает аргументы командной строки и отвечает за отмену, повторные попытки, отчеты и обработку кода завершения.
- Регистрирует пакет выходных данных сборки и активирует точно указанное в манифесте приложение по AUMID.
- Разрешает только SID выбранного пакета при подключении хоста AppContainer к именованным каналам MTP.
- Восстанавливает артефакты TRX, дампов, диагностики и повторных попыток из хранилища, принадлежащего пакету.
Тестовое приложение по-прежнему размещает MTP и MSTest в собственном процессе. Для запуска UWP не требуется Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider или среда выполнения для развертывания Visual Studio.
Для UWP windowsApp Windows предоставляет одну строку активации через LaunchActivatedEventArgs.Arguments вместо обычных аргументов процесса. Вызовите PackagedAppExtensions.GetTestApplicationArguments перед созданием конструктора MTP. Расширение packaged-app восстанавливает исходный массив аргументов и метаданные подключения контроллера.
Для WinUI 3 packagedClassicApp, в том числе работающего в AppContainer, используйте стандартные аргументы процесса.
Соответствие предварительным требованиям
Используйте предварительные требования, которые применяются к проекту:
- Используйте пакет SDK .NET версии 10 или более поздней версии для цепочки инструментов MSTest 4.5 и
dotnet test --project. - Для UWP используйте настольную версию MSBuild из Visual Studio с рабочей нагрузкой "универсальная платформа Windows" и необходимым Windows SDK. Эти компоненты обеспечивают поддержку только на этапе сборки.
- Для WinUI 3 установите средства разработки приложений Windows и найдите совместимую версию Windows App SDK.
- Для упакованных тестовых приложений включите режим разработчика Windows или настройте установку неопубликованных приложений, чтобы Windows могла зарегистрировать неподписанную структуру выходных данных сборки.
- Для тестовых приложений AppContainer запустите контроллер в качестве пользователя без повышенных привилегий.
Настройка тестов UWP
Настройка современного проекта UWP
Используйте MSTest.Sdk 4.5 или более поздней версии, ориентируйтесь на .NET 10 с версией платформы Windows и задайте true значение UseUwp. Сохраните существующие параметры UWP XAML, MSIX, архитектуры и Native AOT.
Visual Studio обычно включает UseUwpTools при сборке. MSTest.Sdk выбирает модель приложения UWP, если UseUwpTools имеет значение true, или когда UseUwp имеет значение true и UseUwpTools еще не задан.
Если вам нужны только ссылки UWP в тестовом приложении, отличном от UWP MTP, установите значение UseUwpToolsfalse. Затем SDK напрямую использует средство выполнения MTP, если только для другой упакованной модели приложения не требуется sidecar.
Полный проект см. в современном примере MTP UWP.
Настройка классического проекта UWP
Сохраните существующую uap10.0 форму проекта, цепочку инструментов MSBuild для настольных компьютеров и пакет SDK расширения UWP. Импортируйте MSTest.Sdk 4.5 или более поздней версии и включите средство выполнения MSTest и MTP. MSTest.Sdk предоставляет совместимые с UAP ресурсы начальной загрузки, адаптера и среды выполнения.
Полный проект см. в классическом примере MTP UWP.
Запуск тестов UWP
Откройте PowerShell разработчика для Visual Studio. Создайте решение для конкретной архитектуры, а затем вызовите 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"
Вторая команда регистрирует пакет, активирует приложение по AUMID, выполняет регулярные и потоковые тесты пользовательского интерфейса, копирует артефакты результатов из хранилища пакетов и возвращает код завершения тестового выполнения.
Настройка тестов WinUI 3
Используйте MSTest.Sdk версии 4.5 или более поздней, задайте для UseWinUI значение true и используйте целевую платформу .NET, специфичную для Windows. Для пакетной активации используйте версию платформы 10.0.19041.0 Windows или более позднюю.
Размещение MTP в приложении WinUI
Для локального тестового приложения WinUI создайте и активируйте окно OnLaunchedтестирования, а затем опубликуйте очередь диспетчера:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Запустите сгенерированный вспомогательный модуль MTP, присвойте его результат Environment.ExitCode, закройте окно и вызовите Exit:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Используйте UITestMethod для тестов, которые создают объекты WinUI или получают к ним доступ. Используйте TestMethod для тестов, которые не требуют потока пользовательского интерфейса.
Предупреждение
Не добавляйте [assembly: WinUITestTarget(...)] в автономное тестовое приложение WinUI. Этот атрибут запускает приложение WinUI в отдельном тестовом узле, но самостоятельно размещённое приложение уже вызвало Application.Start.
Настроить неупакованное приложение
Установите WindowsPackageType на None. Приложение не имеет идентификатора MSIX или AppxManifest.xml, поэтому MTP непосредственно запускает его исполняемый файл. Не добавляйте расширение packaged-app вручную.
Windows App SDK обычно внедряет инициализатор начальной загрузки при выполнении проекта следующих условий:
-
WindowsPackageTypeравноNone. -
OutputType— этоExeилиWinExe. -
WindowsAppSDKSelfContainedне являетсяtrue.
Если хост, который не является приложением Windows App SDK, загружает вашу тестовую библиотеку, установите WindowsAppSdkBootstrapInitialize в значение true в библиотеке.
VSTest не поддерживает распаковку тестовых приложений WinUI 3, так как для его поставщика WinUI требуется манифест AppX.
Полный проект см. в неупакованном примере MTP WinUI.
Настройка упаковаемого приложения полного доверия
Сохраните стандартную пакетную конфигурацию WinUI и связанный с ней Package.appxmanifest. MSTest.Sdk автоматически добавляет ссылку на Microsoft.Testing.Extensions.PackagedApp и регистрирует его для упакованного проекта.
Также не вызывайте AddPackagedAppDeployment. Запуск MTP может зарегистрировать только одно средство запуска хоста тестирования. Установите для EnableMicrosoftTestingExtensionsPackagedApp значение false только в том случае, если настраиваемое средство запуска управляет активацией упакованного приложения.
Полный проект см. в пакетном примере WinUI MTP.
Настройка приложения AppContainer
В манифесте пакета WinUI настройте приложение как packagedClassicApp и задайте TrustLevel="appContainer". MTP 2.5 авторизует точно указанный SID пакета для канала контроллера и каналов расширений. Не дает ALL APPLICATION PACKAGES и не требует исключения для loopback.
Запустите sidecar без повышения привилегий. Используйте целевой объект InvokeTestingPlatform, чтобы компонент sidecar мог скопировать результаты и диагностические данные из пакета LocalState в запрошенный каталог результатов.
Полный проект см. в примере AppContainer WinUI MTP.
Запуск тестов WinUI 3
Сборка для конкретной архитектуры. Для упакованного приложения с полным доверием или неупакованного приложения выполните:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
Также можно использовать dotnet run --no-build -p:Platform=x64.
Для приложения AppContainer WinUI используйте целевой объект sidecar и абсолютный каталог результатов:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Не используйте dotnet exec для приложения WinUI. WinUI определяет ресурсы PRI относительно пути к процессу.
Устранение неполадок при настройке
| Симптом | Проверьте |
|---|---|
Приложение сообщает о нескольких вызовах Application.Start. |
WinUITestTarget Удалите атрибут из локально размещенного тестового приложения WinUI. |
| Выполнение теста завершается, но процесс остается открытым. | Закройте окно теста и вызовите Exit после завершения выполнения MTP. |
Неудачные тесты возвращают код 0выхода процесса. |
Назначьте результат выполнения MTP элементу Environment.ExitCode. |
Незапакованное приложение WinUI сообщает об отсутствии AppxManifest.xml. |
Убедитесь, что проект использует MTP вместо VSTest. |
| Пакетный запуск не может зарегистрировать или активировать приложение. | Подтвердите целевую платформу Windows, режим разработчика или политику неопубликованных приложений, архитектуру и запись исполняемого файла в манифесте. |
| Узел-организатор AppContainer не может подключиться к контроллеру. | Используйте MSTest 4.5 и MTP 2.5 или более поздней версии и запустите контроллер без повышенных привилегий. |
| Отчет AppContainer не копируется в запрошенный каталог. | Используйте InvokeTestingPlatform и укажите абсолютный каталог результатов. |