Partilhar via


Criar extensões personalizadas

Este artigo destina-se a programadores que estão a criar frameworks de teste personalizados ou extensões para o Microsoft.Testing.Platform.

Observação

Para código de exemplo completo, consulte TestingPlatformExamples no repositório Microsoft Test Framework.

Resumo dos pontos de extensão

Ponto de extensão Dentro/Fora do processo Propósito
ITestFramework Em processo A única extensão obrigatória. Descobre e faz testes.
IDataConsumer Em processo Subscreve e processa dados de teste a partir do barramento de mensagens.
ITestSessionLifetimeHandler Em processo Executa código antes e depois de uma sessão de teste.
ITestApplicationLifecycleCallbacks Em processo Executa código no início e no final do host de teste.
ICommandLineOptionsProvider Ambos Adiciona opções de linha de comandos personalizadas.
ITestHostEnvironmentVariableProvider Fora de processo Define variáveis de ambiente antes do início do host de teste.
ITestHostProcessLifetimeHandler Fora de processo Observa o processo anfitrião de teste externamente.

Extensões no processo vs fora do processo

As extensões são categorizadas em dois tipos:

  • Extensões em processo correm dentro do processo anfitrião de teste, juntamente com o framework de teste. Registe-os através de builder.TestHost:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • Extensões fora do processo executam-se num processo separado que observa o host de teste. Registe-os através de builder.TestHostControllers:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHostControllers.AddXXX(/* ... */);
    

Extensões fora do processo são necessárias quando:

  • Tens de definir variáveis de ambiente antes de o host de teste começar.
  • Precisas de monitorizar o host de teste externamente porque o código do utilizador pode crashar ou bloquear o processo.

Quando qualquer extensão fora do processo é registada, a plataforma inicia automaticamente um segundo processo.

O interface IExtension

Todos os pontos de extensão herdam de IExtension, que fornece identificação e permite aceitar/rejeitar funcionalidades ("opt-in/opt-out").

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: Um identificador único para a extensão. Escolha um valor único para evitar conflitos.
  • Version: A versão da extensão, usando versionamento semântico.
  • DisplayName: Um nome fácil de usar que aparece nos registos e --info na saída.
  • Description: Uma descrição que aparece na saída --info.
  • IsEnabledAsync(): Retorne false para excluir a extensão da sessão. Normalmente, as decisões baseiam-se em opções de configuração ou de linha de comandos.
  • Construa um framework de testes: Crie uma implementação personalizada ITestFramework , trate dos pedidos e reporte os resultados dos testes.
  • Construir extensões: Crie extensões em processo e fora do processo, como consumidores de dados, manipuladores de sessão e monitores de processos.
  • VSTest Bridge: Simplificar a migração dos frameworks de teste existentes baseados em VSTest para Microsoft.Testing.Platform.
  • Capacidades: Declarar e consultar estruturas e capacidades de extensão.
  • Serviços: Configuração de acesso, registo, barramento de mensagens e outros serviços de plataforma.