Compartilhar via


Ciclo de vida do MSTest

O MSTest fornece um ciclo de vida bem definido para classes de teste e métodos de teste, permitindo que operações de instalação e de teardown sejam executadas em vários estágios do processo de execução do teste. O ciclo de vida pode ser agrupado nos três estágios a seguir:

  • Ciclo de vida em nível de assembly
  • Ciclo de vida no nível da classe
  • Ciclo de vida do nível de teste

A execução dos eventos do ciclo de vida ocorre do nível mais alto (assembly) ao nível mais baixo (método de teste). A ordem de execução é a seguinte:

  1. Inicialização do Assembly
  2. Inicialização de classe (para cada classe de teste)
  3. Inicialização de teste (para cada método de teste)
  4. Execução de teste
  5. Limpeza dos testes (para cada método individual de teste)
  6. Limpeza de Classe (para cada classe de teste)
  7. Limpeza de código assembly

Ciclo de vida no nível da montagem

O ciclo de vida do assembly descreve o ciclo de vida de todo o assembly, que inclui todas as classes de teste e métodos. Para gerenciar o ciclo de vida do assembly, o MSTest fornece os atributos AssemblyInitialize e AssemblyCleanup . Para saber mais sobre esses atributos, consulte a documentação AssemblyInitialize e AssemblyCleanup .

Ciclo de vida em nível de classe

O ciclo de vida da classe de teste refere-se ao ciclo de vida de classes de teste individuais dentro do assembly e pode ser implementado usando os atributos ClassInitialize e ClassCleanup . Esses atributos permitem que você defina métodos de configuração e teardown executados antes e depois de todos os testes em uma classe, respectivamente. Para obter mais informações sobre esses atributos, consulte a documentação ClassInitialize e ClassCleanup . O ciclo de vida de nível de classe é executado apenas uma vez por classe, independentemente do número de testes em uma classe.

Ciclo de vida em nível de teste

O ciclo de vida do nível de teste é realizado para cada método de teste. Para testes parametrizados, cada conjunto de parâmetros é tratado como um método de teste separado e o ciclo de vida é executado para cada conjunto de parâmetros. O ciclo de vida dos níveis de teste pode ser agrupado em configuração, execução e limpeza, que oferecem suporte a várias maneiras de implementação.

Configuração

A fase de instalação do ciclo de vida do nível de teste é responsável por preparar o ambiente de teste antes da execução de cada método de teste. Isso pode ser obtido usando o TestInitialize atributo ou implementando um construtor na classe de teste. No caso de herança, a execução de TestInitialize métodos segue a ordem da classe base para a classe derivada. Se uma classe de teste implementar um construtor, ela será executada antes do TestInitialize método. Para saber mais sobre o TestInitialize atributo, consulte a documentação do atributo de nível de teste .

Observação

Ao contrário do construtor de classe, TestInitialize os métodos podem ser assíncronos e também dar suporte ao uso de atributo, como o TimeoutAttribute.

Execução

A fase de execução é a fase em que o método de teste real é executado. Se um método de teste retornar um Task ou um ValueTask, o método de teste será aguardado.

Aviso

No caso de métodos de teste assíncronos, nenhum SynchronizationContext é fornecido. Isso não se aplica a UITestMethod testes para UWP e WinUI, pois eles são executados no thread da interface do usuário que tem um SynchronizationContext.

Limpeza

A fase de limpeza do ciclo de vida do nível de teste é responsável por limpar o ambiente de teste após a execução de cada método de teste. Isso pode ser obtido usando o TestCleanup atributo ou implementando a IDisposable/IAsyncDisposable interface na classe de teste. Se uma classe de teste implementar IDisposable ou IAsyncDisposable, seu Dispose/DisposeAsync método será executado após o TestCleanup método. No caso de herança, a execução de TestCleanup métodos segue a ordem da classe derivada para a classe base. Para saber mais sobre o TestInitialize atributo, consulte a documentação do atributo de nível de teste .

Pedido

A ordem completa do ciclo de vida do nível de teste é a seguinte:

  1. Criar instância da classe de teste
  2. Defina a propriedade TestContext se estiver presente
  3. Executar TestInitialize (se implementado)
  4. Execução do método de teste
  5. Atualizar TestContext com os resultados do teste (como a propriedade Outcome)
  6. Executar TestCleanup se implementado
  7. Executar DisposeAsync se implementado
  8. Executar Liberar caso esteja implementado