Implementação do host de teste

Estas extensões controlam como e onde o MTP é implementado e inicia o host de teste. Utilizam o ponto de extensão experimental ITestHostLauncher para controlar a implementação e arranque do host de teste.

Gorjeta

Quando utiliza Microsoft.Testing.Platform.MSBuild, instale o pacote NuGet da extensão para a registar automaticamente. Os runners MSTest, NUnit e xUnit incluem Microsoft.Testing.Platform.MSBuild de forma transitiva. Se desativar o ponto de entrada gerado, chame AddSelfRegisteredExtensions para registar os pacotes com que o MSBuild contribui.

Implementação de aplicações empacotadas

A extensão Microsoft. Testing.Extensions.PackagedApp regista um host de teste Windows empacotado a partir do seu layout de build-output e ativa-o pelo ID do Modelo de Utilizador da Aplicação (AUMID).

O pacote foi introduzido no MTP 2.3. A partir do MTP 2.5, suporta hosts de confiança total e AppContainer empacotados de ponta a ponta, incluindo:

  • Aplicações WinUI 3 empacotadas com confiança total.
  • Aplicações UWP modernas que usam UseUwp.
  • Aplicações UWP clássicas que visam uap10.0.
  • O WinUI 3 packagedClassicApp hospeda que define TrustLevel="appContainer".

O MSTest.Sdk 4.5 ou posterior configura automaticamente esta extensão e o sidecar de modelo de aplicação de confiança total necessário. Para comandos de configuração e execução de aplicações, consulte Testar aplicações UWP e WinUI 3 com MSTest e MTP.

Atenção

A partir do MTP 2.4, Microsoft.Testing.Extensions.PackagedApp segue a versão de lançamento do MTP, e a sua API de registo público deixa de ser experimental. O ponto de extensão genérico ITestHostLauncher mantém-se experimental e pode mudar numa versão futura.

Cumprir os requisitos

Cumpra estes requisitos antes de usar a extensão:

  • Defina como destino a versão 10.0.19041.0 ou posterior da plataforma Windows para uma aplicação empacotada em WinUI 3.
  • Para registar um esquema de saída da compilação não assinado, ative o Modo de Programador ou configure o carregamento lateral.
  • Para UWP, use o MSBuild para ambiente de trabalho do Visual Studio com a carga de trabalho do UWP e o SDK do Windows necessário.
  • Execute os alojamentos de teste AppContainer a partir de um processo controlador não elevado.

Compreender a ativação do pacote

Para uma aplicação empacotada, o iniciador:

  1. Localiza o AppxManifest.xml que descreve o executável de teste.
  2. Regista o esquema de saída da compilação para o utilizador atual.
  3. Resolve o AUMID da aplicação de manifesto selecionada.
  4. Ativa a aplicação e liga-a ao controlador MTP.

Para os anfitriões packagedClassicApp e win32App, o Windows fornece os argumentos MTP através do vetor normal de argumentos do processo. Este comportamento aplica-se também a um packagedClassicApp que usa AppContainer.

Para um UWPwindowsApp, o Windows fornece uma cadeia de ativação opaca através de LaunchActivatedEventArgs.Arguments. Em OnLaunched, chame PackagedAppExtensions.GetTestApplicationArguments antes de criar o construtor MTP.

Ligue um anfitrião AppContainer

Um token AppContainer inclui um SID de pacote restrito. Uma canalização com nome que autoriza apenas o utilizador atual rejeita o processo de AppContainer, mesmo quando este pertence ao mesmo utilizador com sessão iniciada.

No MTP 2.5 ou posterior, o lançador de aplicações empacotadas deriva o SID exato do pacote da aplicação selecionada e pede ao MTP que conceda a esse SID os direitos mínimos do cliente sobre o controlador e os tubos de extensão. A extensão não concede ALL APPLICATION PACKAGES, não reduz o nível de integridade do pipe, nem exige uma isenção de loopback da rede.

O sidecar transfere metadados do controlador através do pacote LocalState. Também copia artefactos TRX, dump, diagnóstico e retry do armazenamento pertencente ao pacote para o diretório de resultados solicitados após a saída do host sandbox.

Controla a ativação automática

Por defeito, o launcher só se ativa quando encontra um manifesto de pacote que descreve a aplicação de teste. Uma aplicação WinUI 3 não embalada ou uma aplicação de teste comum para consola mantém-se no caminho de início direto.

Use TESTINGPLATFORM_PACKAGEDAPP_LAUNCHER para substituir a deteção de pacotes:

Value Comportamento
auto ou não definido Ative apenas para um layout incluído num pacote.
always Ativa qualquer layout, incluindo um layout solto que queiras implementar antes de arrancar.
never Desative o iniciador de aplicações empacotadas.

Utilize TESTINGPLATFORM_PACKAGEDAPP_PIPEAUTHORIZATION para substituir a autorização do SID do pacote:

Value Comportamento
auto ou não definido Autorize o SID do pacote apenas se o manifesto declarar uma aplicação AppContainer.
always Solicite autorização do pacote SID para qualquer layout empacotado.
never Mantenha a autorização do pipe apenas para o utilizador atual.

Registe a extensão manualmente

Se não usar o registo automático do MSBuild, registe-se a extensão no seu construtor MTP:

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddPackagedAppDeployment();

Não chame AddPackagedAppDeployment se a aplicação já chamar AddSelfRegisteredExtensions e fizer referência ao pacote. Uma execução MTP só pode registar um lançador de host de teste.