Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use Microsoft. Test.Platform (MTP) para executar testes MSTest dentro de aplicativos UWP e WinUI 3. O aplicativo atua como o host de teste e possui seu thread de interface do usuário e o tempo de vida do processo.
Importante
A matriz de suporte completa Windows aplicativo descrita neste artigo está disponível com MSTest 4.5 e MTP 2.5. Até que as versões estáveis sejam lançadas, use os pacotes de versão prévia correspondentes 4.5 e 2.5. Se você gerencia pacotes MTP diretamente, mantenha alinhadas as versões dos pacotes de plataforma e de extensão.
Escolher um modelo de aplicativo
O MSTest.Sdk dá suporte aos seguintes modelos de aplicativo Windows por meio do MTP:
| Modelo de aplicativo | Empacotamento e confiança | Inicialização do host de teste | Executar comando |
|---|---|---|---|
UWP clássico (uap10.0) |
AppContainer em pacote | Um sidecar de confiança total registra o pacote e ativa o aplicativo pelo Application User Model ID (AUMID). |
MSBuild com o alvo InvokeTestingPlatform |
UWP moderna (.NET 10 com UseUwp) |
AppContainer em pacote | Um sidecar de confiança plena registra o pacote e ativa o aplicativo por meio do AUMID. |
MSBuild com o InvokeTestingPlatform alvo |
| WinUI 3 empacotada | Confiança total empacotada | Um sidecar de confiança plena registra o pacote e ativa o aplicativo por meio da AUMID. |
dotnet run ou dotnet test --project |
| WinUI 3 não empacotado | Sem identidade de pacote, confiança total | O MTP inicia o executável do aplicativo diretamente. |
dotnet run ou dotnet test --project |
WinUI 3 packagedClassicApp com TrustLevel="appContainer" |
AppContainer empacotado | Um sidecar de confiança total ativa o aplicativo e autoriza seu identificador de segurança de pacote (SID) exato em canais de comunicação MTP. |
dotnet msbuild com o alvo InvokeTestingPlatform |
Empacotamento e isolamento em sandbox são escolhas separadas. Um aplicativo de desktop WinUI 3 empacotado tem identidade de pacote, mas é executado como um processo de confiança total por padrão. Um aplicativo UWP sempre é executado no AppContainer. Um aplicativo WinUI 3 empacotado é executado em AppContainer apenas quando seu manifesto define TrustLevel="appContainer".
Para versões mais antigas do MSTest ou MTP, mantenha a configuração existente do VSTest para projetos UWP. A execução nativa de MTP para hosts UWP e AppContainer requer MSTest 4.5 e MTP 2.5.
Entenda o arquivo secundário do modelo de aplicativo MTP
Para um aplicativo empacotado, o processo de ferramenta de teste inicial não pode ser executado dentro do pacote. O MSTest.Sdk inicia um controlador sidecar com confiança total que:
- Prepara argumentos de linha de comando e possui cancelamento, repetições, relatórios e tratamento de código de saída.
- Registra o pacote de saída da compilação e ativa o aplicativo exato definido no manifesto por AUMID.
- Autoriza apenas o SID do pacote selecionado quando um host do AppContainer se conecta aos pipes nomeados MTP.
- Recupera os artefatos TRX, dump, diagnóstico e retry do armazenamento pertencente ao pacote.
O aplicativo de teste ainda hospeda MTP e MSTest em seu próprio processo. A execução de UWP não requer Microsoft.NET.Test.Sdk, UwpTestHostRuntimeProvider, vstest.console nem o runtime de implantação do Visual Studio.
Para uma UWP windowsApp, o Windows fornece uma cadeia de ativação por meio de LaunchActivatedEventArgs.Arguments em vez dos argumentos normais do processo. Chame PackagedAppExtensions.GetTestApplicationArguments antes de criar o construtor MTP. A extensão de aplicativo empacotado restaura a matriz de argumentos original e os metadados de conexão do controlador.
Para um aplicativo WinUI 3 packagedClassicApp, inclusive um executado no AppContainer, use os argumentos normais do processo.
Atender aos pré-requisitos
Use os pré-requisitos que se aplicam ao seu projeto:
- Use .NET SDK 10 ou posterior para a cadeia de ferramentas MSTest 4.5 e
dotnet test --project. - Para UWP, use o MSBuild para desktop do Visual Studio com a carga de trabalho da Plataforma Universal do Windows e o SDK do Windows necessário. Esses componentes fornecem suporte apenas durante a compilação.
- Para o WinUI 3, instale as ferramentas de desenvolvimento de aplicativos Windows e faça referência a uma versão SDK do Aplicativo Windows compatível.
- Para aplicativos de teste empacotados, habilite o modo de desenvolvedor do Windows ou configure o sideload para que o Windows possa registrar um layout de saída de build não assinado.
- Para aplicativos de teste do AppContainer, execute o controlador como um usuário sem privilégios elevados.
Configurar testes UWP
Configurar um projeto UWP moderno
Use o MSTest.Sdk 4.5 ou superior, tenha como destino o .NET 10 com uma versão de plataforma do Windows e defina UseUwp como true. Mantenha seu XAML UWP, MSIX, arquitetura e configurações do Native AOT existentes.
Visual Studio normalmente habilita UseUwpTools durante o build. O MSTest.Sdk seleciona o modelo de aplicativo UWP quando UseUwpTools está trueou quando UseUwp está true e UseUwpTools ainda não está definido.
Se você precisar apenas de referências UWP em um aplicativo de teste MTP não UWP, defina UseUwpTools como false. Em seguida, o SDK usa o executor MTP direto, a menos que outro modelo de aplicativo empacotado exija o sidecar.
Para obter um projeto completo, consulte o exemplo de MTP UWP moderno.
Configurar um projeto UWP clássico
Mantenha a estrutura existente do projeto uap10.0, o conjunto de ferramentas do MSBuild para desktop e o SDK de extensão do UWP. Importe MSTest.Sdk 4.5 ou posterior e habilite o mstest runner e o MTP. O MSTest.Sdk fornece os recursos de bootstrap, o adaptador e os recursos de runtime compatíveis com UAP.
Para obter um projeto completo, consulte o exemplo de MTP UWP clássico.
Executar testes UWP
Abra um PowerShell do desenvolvedor para Visual Studio. Crie a solução para uma arquitetura concreta e invoque 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 registra o pacote, ativa o aplicativo por AUMID, executa testes regulares e de thread da interface do usuário, copia artefatos de resultados do armazenamento do pacote e retorna o código de saída da execução dos testes.
Configurar testes do WinUI 3
Use o MSTest.Sdk 4.5 ou posterior, defina UseWinUI como truee direcione uma estrutura de destino específica Windows. Para ativação empacotada, use a versão da plataforma Windows 10.0.19041.0 ou posterior.
Hospedar MTP em um aplicativo WinUI
Para um aplicativo de teste WinUI autohospedado, crie e ative a janela de teste em OnLaunched e, em seguida, publique sua fila do dispatcher:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Execute o auxiliar de MTP gerado, atribua 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 acessam objetos WinUI. Use TestMethod para testes que não exigem o thread da interface do usuário.
Warning
Não adicione [assembly: WinUITestTarget(...)] a um aplicativo WinUI de teste hospedado localmente. Esse atributo inicia um aplicativo WinUI em um host de teste separado, mas o aplicativo auto-hospedado já chamou Application.Start.
Configurar um aplicativo não empacotado
Defina WindowsPackageType como None. O aplicativo não tem nenhuma identidade MSIX ou AppxManifest.xml, portanto, o MTP inicia seu executável diretamente. Não adicione a extensão do aplicativo empacotado manualmente.
O SDK do Aplicativo Windows normalmente injeta seu inicializador bootstrap quando o projeto atende às seguintes condições:
-
WindowsPackageTypeéNone. -
OutputTypeéExeouWinExe. -
WindowsAppSDKSelfContainednão étrue.
Se um host que não é um aplicativo do SDK do Aplicativo Windows carregar sua biblioteca de teste, defina WindowsAppSdkBootstrapInitialize como true na biblioteca.
O VSTest não dá suporte a aplicativos de teste WinUI 3 não empacotados porque seu provedor WinUI requer um manifesto AppX.
Para obter um projeto completo, consulte o exemplo de MTP do WinUI não empacotado.
Configurar um aplicativo empacotado de confiança total
Mantenha a configuração empacotada padrão do WinUI e sua Package.appxmanifest. O MSTest.Sdk referencia e registra Microsoft.Testing.Extensions.PackagedApp automaticamente para o projeto empacotado.
Não ligue AddPackagedAppDeploymenttambém. Uma execução do MTP pode registrar apenas um inicializador do host de teste. Defina false como EnableMicrosoftTestingExtensionsPackagedApp somente quando um inicializador personalizado for responsável pela ativação empacotada.
Para ver um projeto completo, consulte o exemplo empacotado do WinUI MTP.
Configurar um aplicativo AppContainer
No manifesto do pacote WinUI, configure o aplicativo como packagedClassicApp e defina TrustLevel="appContainer". O MTP 2.5 autoriza o SID exato do pacote no controlador e nos pipes de extensão. Não concede ALL APPLICATION PACKAGES nem exige isenção de loopback.
Execute o sidecar não elevado. Use o destino InvokeTestingPlatform para que o sidecar possa copiar resultados e diagnósticos do pacote LocalState para o diretório de resultados solicitado.
Para obter um projeto completo, consulte o exemplo de MTP do AppContainer WinUI.
Executar testes do WinUI 3
Construir para uma arquitetura concreta. Para um aplicativo de confiança plena empacotado ou um aplicativo não empacotado, execute:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
Também é possível usar dotnet run --no-build -p:Platform=x64.
Para um aplicativo AppContainer WinUI, use o destino 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 use dotnet exec para um aplicativo WinUI. O WinUI localiza os recursos PRI em relação ao caminho do processo.
Solucionar problemas na configuração
| Sintoma | Verificação |
|---|---|
O aplicativo relata várias chamadas para Application.Start. |
Remova o WinUITestTarget atributo de um aplicativo de teste WinUI auto-hospedado. |
| A execução do teste é concluída, mas o processo permanece aberto. | Feche a janela de teste e chame Exit após a conclusão da execução do MTP. |
Os testes com falha retornam o código 0de saída do processo. |
Atribua o resultado da execução do MTP a Environment.ExitCode. |
Uma execução não empacotada do WinUI relata a ausência de AppxManifest.xml. |
Confirme se o projeto usa MTP em vez de VSTest. |
| Uma execução empacotada não pode registrar ou ativar o aplicativo. | Confirme a estrutura de destino Windows, o Modo de Desenvolvedor ou a política de sideload, a arquitetura e a entrada executável do manifesto. |
| Um host AppContainer não pode se conectar ao controlador. | Use MSTest 4.5 e MTP 2.5 ou posterior e execute o controlador sem elevação. |
| Um relatório AppContainer não é copiado para o diretório solicitado. | Use InvokeTestingPlatform e especifique um diretório de resultados absolutos. |