Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Utilize o Microsoft.Testing.Platform (MTP) para executar testes MSTest em aplicações UWP e WinUI 3. A aplicação atua como anfitriã dos testes e controla a thread da interface do utilizador e o tempo de vida do processo.
Importante
A matriz completa de suporte a aplicações Windows descrita neste artigo está disponível com MSTest 4.5 e MTP 2.5. Até serem lançadas as versões estáveis, utilize pacotes de pré-visualização correspondentes da 4.5 e 2.5. Se gerir pacotes MTP diretamente, mantenha as versões da plataforma e dos pacotes de extensão alinhadas.
Escolha um modelo de aplicação
O MSTest.Sdk suporta os seguintes modelos de aplicações Windows através do MTP:
| Modelo de aplicação | Embalagem e confiança | Arranque do host de teste | Executar comando |
|---|---|---|---|
UWP clássico (uap10.0) |
Contentor de Aplicações Empacotadas | Um sidecar de confiança total regista o pacote e ativa a aplicação pelo ID do Modelo de Utilizador da Aplicação (AUMID). |
MSBuild com o InvokeTestingPlatform alvo |
UWP moderno (.NET 10 com UseUwp) |
Contentor de Aplicações Empacotadas | Um sidecar de confiança total regista o pacote e ativa a aplicação pela AUMID. |
MSBuild com o InvokeTestingPlatform alvo |
| WinUI 3 empacotado | Total confiança empacotada | Um sidecar de confiança plena regista o pacote e ativa a aplicação através do AUMID. |
dotnet run ou dotnet test --project |
| WinUI 3 não empacotado | Sem identidade de encomenda, confiança total | O MTP inicia o executável da aplicação diretamente. |
dotnet run ou dotnet test --project |
WinUI 3 packagedClassicApp com TrustLevel="appContainer" |
Contentor de Aplicações Empacotadas | Um sidecar de confiança total ativa a aplicação e autoriza o identificador de segurança (SID) exato do pacote nos canais de comunicação MTP. |
dotnet msbuild com o InvokeTestingPlatform alvo |
O empacotamento e o isolamento em sandbox são opções distintas. Uma aplicação WinUI 3 de ambiente de trabalho empacotada tem identidade de pacote, mas é executada como um processo com confiança total por predefinição. Uma aplicação UWP corre sempre no AppContainer. Uma aplicação WinUI 3 empacotada só corre no AppContainer quando o seu manifesto define TrustLevel="appContainer".
Para versões mais antigas do MSTest ou MTP, mantém a configuração VSTest existente para projetos UWP. A execução nativa de MTP para hosts UWP e AppContainer requer MSTest 4.5 e MTP 2.5.
Compreenda o modelo de sidecar da aplicação MTP
Para uma aplicação empacotada, o processo inicial da ferramenta de teste não pode correr dentro do pacote. O MSTest.Sdk inicia um controlador auxiliar com confiança total que:
- Prepara argumentos da linha de comandos e é responsável pelo cancelamento, pelas novas tentativas, pelos relatórios e pelo tratamento do código de saída.
- Regista o pacote build-output e ativa a aplicação manifesta exata pelo AUMID.
- Autoriza apenas o SID do pacote selecionado quando um host AppContainer se liga a pipelines nomeados MTP.
- Recupera artefactos TRX, dumps, de diagnóstico e de repetição do armazenamento pertencente ao pacote.
A aplicação de teste continua a alojar o MTP e o MSTest no seu próprio processo. A execução do UWP não requer Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider, nem o runtime de implementação do Visual Studio.
Para um UWP windowsApp, o Windows fornece uma cadeia de caracteres de ativação através de LaunchActivatedEventArgs.Arguments, em vez dos argumentos normais do processo. Chama PackagedAppExtensions.GetTestApplicationArguments antes de criar o criador MTP. A extensão packaged-app restaura o array original de argumentos e os metadados da ligação ao controlador.
Para um WinUI 3 packagedClassicApp, incluindo um que corre em AppContainer, use os argumentos normais do processo.
Cumprir os pré-requisitos
Use os pré-requisitos que se aplicam ao seu projeto:
- Use o .NET SDK 10 ou posterior para a cadeia de ferramentas MSTest 4.5 e
dotnet test --project. - Para UWP, use o MSBuild para ambiente de trabalho do Visual Studio com a carga de trabalho Plataforma Universal do Windows e o SDK do Windows necessário. Estes componentes fornecem apenas suporte em tempo de construção.
- Para o WinUI 3, instale as ferramentas de desenvolvimento de aplicações Windows e consulte uma versão compatível do SDK de Aplicações Windows.
- Para aplicações de teste empacotadas, ative o Modo Desenvolvedor do Windows ou configure o sideloading para que o Windows possa registar um layout de saída de compilação sem assinatura.
- Para aplicações de teste do AppContainer, execute o controlador como um utilizador sem privilégios elevados.
Configurar testes UWP
Configurar um projeto UWP moderno
Utilize o MSTest.Sdk 4.5 ou posterior, defina o .NET 10 como destino com uma versão de plataforma do Windows e defina UseUwp como true. Mantenha o seu UWP XAML, MSIX e arquitetura existentes, bem como as suas definições do Native AOT.
O Visual Studio normalmente ativa UseUwpTools durante a compilação. O MSTest.Sdk seleciona o modelo de aplicação UWP quando UseUwpTools está true, ou quando UseUwp está true e UseUwpTools ainda não está definido.
Se só precisar de referências UWP numa aplicação de teste MTP que não seja UWP, defina UseUwpTools para false. O SDK utiliza então o executor MTP direto, a menos que outro modelo de aplicação empacotada exija o sidecar.
Para um projeto completo, consulte o exemplo moderno do UWP MTP.
Configurar um projeto clássico UWP
Mantém a estrutura existente uap10.0 do projeto, a cadeia de ferramentas do MSBuild para o ambiente de trabalho e o SDK da extensão UWP. Importa MSTest.Sdk 4.5 ou posterior, e ativa o runner MSTest e o MTP. O MSTest.Sdk fornece o bootstrap, adaptador e ativos de runtime compatíveis com UAP.
Para um projeto completo, veja o exemplo clássico do UWP MTP.
Executar testes UWP
Abre um PowerShell para desenvolvedores no Visual Studio. Constrói a solução para uma arquitetura de betão e depois invoca o 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"
O segundo comando regista o pacote, ativa a aplicação pelo AUMID, executa testes regulares e UI-thread, copia artefactos de resultados do armazenamento do pacote e devolve o código de saída da execução do teste.
Configurar testes do WinUI 3
Use o MSTest.Sdk 4.5 ou posterior, defina UseWinUI para true, e aponte um framework de destino específico do Windows. Para ativação em pacotes, use a versão 10.0.19041.0 da plataforma Windows ou posterior.
Alojar MTP na aplicação WinUI
Para uma aplicação de teste WinUI autoalojada, crie e ative a janela de teste em OnLaunched e, em seguida, publique a sua fila do dispatcher:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Execute o assistente MTP gerado, atribua o seu resultado a Environment.ExitCode, feche a janela e chame Exit:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Use UITestMethod para testes que criam ou acedam a objetos WinUI. Utilize TestMethod para testes que não exigem a thread da IU.
Warning
Não adicione [assembly: WinUITestTarget(...)] a uma aplicação de teste WinUI autoalojada. Este atributo inicia uma aplicação WinUI num host de teste separado, mas a aplicação auto-hospedada já invocou Application.Start.
Configurar uma aplicação não embalada
Defina WindowsPackageType como None. A aplicação não tem identidade MSIX nem AppxManifest.xml, por isso o MTP inicia o seu executável diretamente. Não adicione manualmente a extensão de aplicação empacotada.
O SDK de Aplicações Windows normalmente injeta o seu inicializador de arranque quando o projeto cumpre estas condições:
-
WindowsPackageTypeéNone. -
OutputTypeéExeouWinExe. -
WindowsAppSDKSelfContainednão étrue.
Se um host que não é uma aplicação do SDK de Aplicações Windows carregar a tua biblioteca de teste, define WindowsAppSdkBootstrapInitialize para true dentro da biblioteca.
O VSTest não suporta aplicações de teste WinUI 3 não empacotadas porque o seu fornecedor WinUI exige um manifesto do AppX.
Para um projeto completo, veja o exemplo não embalado do WinUI MTP.
Configurar uma aplicação empacotada de confiança total
Mantém a configuração predefinida do WinUI incluída no pacote e o respetivo Package.appxmanifest. O MSTest.Sdk faz automaticamente referência a Microsoft.Testing.Extensions.PackagedApp e regista-o no projeto empacotado.
Também não ligues AddPackagedAppDeployment. Uma execução MTP só pode registar um lançador de host de teste. Defina EnableMicrosoftTestingExtensionsPackagedApp como false apenas quando um iniciador personalizado controla a ativação empacotada.
Para um projeto completo, veja o exemplo de MTP do WinUI incluído.
Configurar uma aplicação AppContainer
No manifesto do pacote WinUI, configure a aplicação como packagedClassicApp e defina TrustLevel="appContainer". O MTP 2.5 autoriza o SID exato do pacote no controlador e nos tubos de extensão. Não concede ALL APPLICATION PACKAGES nem exige uma isenção de loopback.
Faz o sidecar funcionar sem elevação. Utilize o destino InvokeTestingPlatform para que o sidecar possa copiar os resultados e os diagnósticos a partir do pacote LocalState para o diretório de resultados solicitado.
Para um projeto completo, veja o exemplo do AppContainer WinUI MTP.
Executar testes WinUI 3
Constrói para uma arquitetura em betão. Para uma aplicação full-trust ou não empacotada, execute:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
Você também pode usar dotnet run --no-build -p:Platform=x64.
Para uma aplicação WinUI do AppContainer, use o alvo do sidecar e um diretório de resultados absolutos:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Não uses dotnet exec para uma aplicação WinUI. O WinUI resolve recursos PRI relativamente ao caminho do processo.
Resolver problemas de configuração
| Symptom | Verificar |
|---|---|
A aplicação reporta múltiplas chamadas para Application.Start. |
Remova o WinUITestTarget atributo de uma aplicação de teste WinUI auto-hospedada. |
| O teste termina, mas o processo mantém-se aberto. | Feche a janela de teste e chame Exit depois de concluída a execução do MTP. |
Testes falhados devolvem o código 0de saída do processo. |
Atribuir o resultado da execução MTP a Environment.ExitCode. |
Uma execução do WinUI sem empacotamento indica a ausência de AppxManifest.xml. |
Confirma que o projeto usa MTP em vez de VSTest. |
| Uma execução empacotada não pode registar nem ativar a aplicação. | Confirme o framework de destino do Windows, o Modo de Programador ou a política de instalação lateral, a arquitetura e a entrada do executável no manifesto. |
| Um host AppContainer não consegue ligar-se ao controlador. | Utilize o MSTest 4.5 e o MTP 2.5 ou posterior, e execute o controlador sem privilégios elevados. |
| Um relatório AppContainer não é copiado para o diretório solicitado. | Use InvokeTestingPlatform e especifique um diretório de resultados absolutos. |