Compartilhar via


Criar extensões personalizadas

Este artigo é para desenvolvedores que criam estruturas de teste personalizadas ou extensões para Microsoft.Testing.Platform.

Observação

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

Resumo do ponto de extensão

Ponto de extensão Entrada/saída do processo Propósito
ITestFramework Em andamento A única extensão obrigatória. Descobre e executa testes.
IDataConsumer Em andamento Assina e processa dados de teste do sistema de mensagens.
ITestSessionLifetimeHandler Em andamento Executa o código antes e depois de uma sessão de teste.
ITestApplicationLifecycleCallbacks Em andamento Executa o código no início e no final do host de teste.
ICommandLineOptionsProvider Ambos Adiciona opções de linha de comando personalizadas.
ITestHostEnvironmentVariableProvider Fora do processo Define variáveis de ambiente antes do início do host de teste.
ITestHostProcessLifetimeHandler Fora do processo Observa o processo de host de teste externamente.

Extensões in-process versus processos externos

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

  • As extensões em processo são executadas dentro do processo de host de teste, juntamente com a estrutura de teste. Registre-os por meio de builder.TestHost:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • As extensões fora de processo são executadas em um processo separado que observa o host de teste. Registre-os por meio de builder.TestHostControllers:

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

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

  • Você precisa definir variáveis de ambiente antes do host de teste ser iniciado.
  • Você precisa monitorar o host de teste externamente porque o código do usuário pode falhar ou desligar o processo.

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

A interface IExtension.

Todos os pontos de extensão herdam de IExtension, que fornece identificação e opções de participação/opção de não participação.

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: um identificador exclusivo para a extensão. Escolha um valor exclusivo para evitar conflitos.
  • Version: A versão da extensão, usando versionamento semântico.
  • DisplayName: um nome amigável que aparece em logs e --info saída.
  • Description: uma descrição que aparece na saída de --info.
  • IsEnabledAsync(): retorne false para excluir a extensão da sessão. Normalmente, as decisões são baseadas em opções de configuração ou linha de comando.
  • Crie uma estrutura de teste: crie uma implementação personalizada ITestFramework , manipule solicitações e relate os resultados do teste.
  • Extensões de compilação: Crie extensões em processo e fora de processo, como consumidores de dados, manipuladores de sessão e monitores de processo.
  • Ponte VSTest: simplifique a migração de estruturas de teste baseadas em VSTest existentes para Microsoft.Testing.Platform.
  • Funcionalidades: declarar e consultar recursos de estrutura e extensão.
  • Services: Configuração de acesso, registros de log, barramento de mensagens e outros serviços de plataforma.