Integração com Microsoft.Extensions

Estas extensões fazem a ponte entre a Microsoft. Testing.Platform (MTP) para as Microsoft.Extensions.* bibliotecas que a sua aplicação já utiliza, por isso os componentes da plataforma e da extensão passam pela mesma infraestrutura que o resto do seu código. Cada extensão requer um pacote NuGet adicional, conforme descrito em cada secção.

Gorjeta

Ao usar Microsoft.Testing.Platform.MSBuild, o pacote de registo é registado automaticamente com um ponto de entrada gerado. O pacote de configuração requer uma IConfiguration instância, e o pacote de alojamento requer um TestingPlatformHostFactory ou um ponto de entrada personalizado, por isso siga as secções de registo deles.

Ponte madeireira

A ponte de registo encaminha os registos de diagnóstico do Microsoft.Testing.Platform para ILogger, pelo que os registos da plataforma e da extensão fluem pelo mesmo processamento Microsoft.Extensions.Logging que a sua aplicação já utiliza. Pode reutilizar uma pilha de registos existente — Consola, Debug, Serilog, Application Insights, OpenTelemetry ou um personalizado ILoggerProvider — sem precisar de escrever um fornecedor personalizado de registos MTP. Esta extensão requer o pacote NuGet Microsoft.Testing.Extensions.Logging.

Note

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

A ponte encaminha cada mensagem apenas quando o registo de diagnóstico da plataforma está ativado. Quando o nível de registo efetivo da plataforma é None (a predefinição, a menos que seja passado --diagnostic), o delegado de configuração não é invocado e não é criada nenhuma fábrica de registadores. Os filtros por categoria que defines ILoggingBuilder podem restringir o nível de diagnóstico efetivo da plataforma, mas não o conseguem alargar.

Registo 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 ao pipeline de configuração do MTP um instantâneo só de leitura de um IConfiguration pertencente à aplicação.

Registe a configuração antes de construir a aplicação de teste:

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

Por predefinição, o instantâneo utiliza a ordem 2. Os valores da linha de comandos MTP (ordem 0) e as variáveis de ambiente (ordem 1) têm precedência, enquanto o instantâneo tem precedência sobre testconfig.json (ordem 3). Indique uma ordem diferente quando a sua aplicação exigir outra precedência.

O MTP lê o snapshot quando BuildAsync constrói o pipeline de configuração. Alterações posteriores e notificações de recarregamento não se propagam. O chamador mantém a propriedade da configuração, as chaves hierárquicas mantêm o delimitador padrão : e o registo aplica-se apenas ao processo atual. Um objeto de configuração ativo não transita para um controlador iniciado em separado nem para um processo anfitrião de teste.

Integração com host

O pacote experimental Microsoft.Testing.Extensions.Hosting executa o MTP dentro de uma aplicação IHost. O host continua a ser a raiz de composição e é proprietário do seu fornecedor de serviços, da configuração, do registo em log, dos fornecedores OpenTelemetry, do ciclo de vida e da eliminação.

Para um ponto de entrada gerado, defina TestingPlatformHostFactory para um método estático totalmente qualificado que devolve um método fresco, não iniciado Task<IHost>:

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

Definir TestingPlatformOpenTelemetryMode como HostOwned quando o host é o proprietário dos providers do OpenTelemetry e o projeto de teste faz referência a Microsoft.Testing.Extensions.OpenTelemetry. O ponto de entrada gerado cria e encerra o host, preserva as extensões autorregistadas e ignora a fábrica para --help e --info da linha de comandos.

Para um ponto de entrada personalizado, chama RunTestingPlatformAsync no anfitrião e regista o framework de testes através do respetivo callback. O método importa uma captura de configuração, encaminha os diagnósticos do MTP para o ILoggerFactory do anfitrião, inicia o anfitrião antes do MTP, associa o cancelamento do anfitrião e do chamador ao MTP, devolve o código de saída do MTP e interrompe o anfitrião num bloco finally. Quem chama ainda assim elimina o anfitrião.

Mantenha a saída padrão livre de mensagens de arranque, encerramento, registo e do exportador do host, porque o MTP a utiliza para modos legíveis por máquina, como --list-tests json, o modo de servidor JSON-RPC e o protocolo dotnet test. Também evite recursos globais exclusivos numa fábrica anfitriã, utilizados com extensões de reinício de processo, porque cenários de nova tentativa, despejo de falha ou despejo de bloqueio podem invocar a fábrica no processo controlador e nos processos subordinados.

Importante

As APIs de configuração e alojamento usam o TPEXP ID de diagnóstico e podem mudar numa versão futura. Estão disponíveis em pacotes de pré-visualização do MTP 2.5.