Integração com Microsoft.Extensions

Essas extensões fazem a integração entre o Microsoft.Testing.Platform (MTP) e as bibliotecas Microsoft.Extensions.* que seu aplicativo já usa, para que os componentes da plataforma e das extensões passem pela mesma infraestrutura que o restante do seu código. Cada extensão requer um pacote NuGet adicional, conforme descrito em cada seção.

Dica

Ao usar Microsoft. Testing.Platform.MSBuild, o pacote de log é registrado automaticamente com um ponto de entrada gerado. O pacote de configuração requer uma instância de IConfiguration, e o pacote de hospedagem requer TestingPlatformHostFactory ou um ponto de entrada personalizado, portanto, siga as respectivas seções de registro.

Ponte de logs

A ponte de logs encaminha os logs de diagnóstico Microsoft.Testing.Platform para ILogger, de modo que os logs da plataforma e da extensão fluam pelo mesmo fluxo Microsoft.Extensions.Logging já usado pelo seu aplicativo. Você pode reutilizar uma pilha de logs existente — Console, Debug, Serilog, Application Insights, OpenTelemetry ou um ILoggerProvider personalizado — sem precisar gravar um provedor de logger do MTP personalizado. Esta extensão requer o pacote NuGet Microsoft.Testing.Extensions.Logging.

Note

Disponível no MTP a partir da versão 2.3.0. Essa extensão é experimental e suas opções e formato de saída podem mudar em uma versão futura.

A ponte encaminha cada mensagem somente quando o registro de diagnóstico da plataforma está habilitado. Quando o nível de log efetivo da plataforma é None (o padrão, a menos que você passe --diagnostic), o delegado de configuração não é invocado e nenhuma fábrica de loggers é criada. Os filtros por categoria definidos no ILoggingBuilder podem restringir o nível de diagnóstico efetivo da plataforma, mas eles não podem ampliá-lo.

Registro manual

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsLogging(logging => logging.AddConsole());

Instantâneo de configuração

O pacote experimental Microsoft.Testing.Extensions.Configuration adiciona um instantâneo somente para leitura de um IConfiguration pertencente ao aplicativo ao pipeline de configuração do MTP.

Registre a configuração antes de criar o aplicativo de teste:

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsConfigurationSnapshot(configuration);

Por padrão, o snapshot usa a ordem 2. Valores de linha de comando MTP (ordem 0) e variáveis de ambiente (ordem 1) têm precedência, enquanto o instantâneo tem precedência sobre testconfig.json (ordem 3). Informe uma ordem de precedência diferente quando seu aplicativo exigir outra.

O MTP lê o snapshot quando BuildAsync monta o pipeline de configuração. Alterações posteriores e notificações de recarregamento não são propagadas. O chamador mantém a propriedade da configuração, as chaves hierárquicas mantêm o delimitador padrão : e o registro se aplica somente ao processo atual. Um objeto de configuração dinâmico não é passado para um controlador ou processo host de teste iniciado separadamente.

Integração com o host

O pacote experimental Microsoft.Testing.Extensions.Hosting executa o MTP dentro de um IHost de propriedade do aplicativo. O host continua sendo a raiz de composição e é responsável por seu provedor de serviços, configuração, log, provedores OpenTelemetry, ciclo de vida e descarte.

Para um ponto de entrada gerado, defina TestingPlatformHostFactory como um método estático totalmente qualificado que retorna um novo e não iniciado Task<IHost>:

<TestingPlatformHostFactory>Contoso.Tests.TestHost.CreateHost</TestingPlatformHostFactory>

Defina TestingPlatformOpenTelemetryMode para HostOwned quando o host possuir provedores do OpenTelemetry e o projeto de teste fizer referência a Microsoft.Testing.Extensions.OpenTelemetry. O ponto de entrada gerado cria e descarta o host, preserva as extensões auto-registradas e ignora a fábrica para --help e --infoda linha de comando.

Para um ponto de entrada personalizado, chame RunTestingPlatformAsync no host e registre o framework de teste por meio de seu callback. O método importa um instantâneo de configuração, encaminha os diagnósticos MTP para o ILoggerFactory, do host, inicia o host antes do MTP, vincula o cancelamento do host e do chamador ao MTP, retorna o código de saída do MTP e interrompe o host em um bloco finally. O chamador ainda descarta o host.

Mantenha a saída padrão livre de mensagens de inicialização, desligamento, registro em log e exportação, porque o MTP a usa para modos legíveis por máquina, como --list-tests json, modo de servidor JSON-RPC e o protocolo dotnet test. Evite também recursos globais exclusivos em uma fábrica do host usados com extensões de reinício de processo, porque cenários de nova tentativa, dump de falha ou dump de travamento podem invocar a fábrica em processos de controlador e processos filho.

Importante

As APIs de configuração e hospedagem usam a ID de diagnóstico TPEXP e podem mudar em uma versão futura. Eles estão disponíveis em pacotes de versão prévia do MTP 2.5.