Partilhar 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 configuração e desmontagem sejam executadas em vários estágios do processo de execução do teste. O ciclo de vida pode ser agrupado nas seguintes três etapas:

  • Ciclo de vida no nível da montagem
  • Ciclo de vida a nível de classe
  • Ciclo de vida em nível de teste

A execução dos eventos do ciclo de vida ocorre do nível mais alto (montagem) 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 do teste (para cada método de teste)
  4. Execução de Testes
  5. Limpeza após os testes (para cada método de teste)
  6. Limpeza da Aula (por cada aula de teste)
  7. Limpeza pós-montagem

Ciclo de vida no nível da montagem

O ciclo de vida da montagem descreve o ciclo de vida de toda a montagem, que inclui todas as classes e métodos de teste. 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 de 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 desmontagem que são 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 do nível da classe é executado apenas uma vez por classe, independentemente do número de testes em uma classe.

Ciclo de vida do nível de teste

O ciclo de vida do nível de teste é executado 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 do nível de teste pode ser agrupado em configuração, execução e desmontagem, com a configuração e a desmontagem suportando várias formas de implementação.

Configuração

A fase de configuraçã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 conseguido 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 implementa um construtor, ela é 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, os métodos podem ser assíncronos e também suportam o uso de atributos, TestInitialize 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 ValueTask, o método de teste será aguardado.

Advertência

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

Limpeza

A fase de limpeza do ciclo de vida do nível de teste é responsável pela limpeza do ambiente de teste após a execução de cada método de teste. Isso pode ser conseguido usando o TestCleanup atributo ou implementando a IDisposable/IAsyncDisposable interface na classe de teste. Se uma classe de teste implementa IDisposable ou IAsyncDisposable, seu Dispose/DisposeAsync método é executado após o TestCleanup método. Em caso de herança, a execução dos 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 .

Encomenda

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. Execute TestInitialize (se implementado)
  4. Execução do método de ensaio
  5. Atualizar TestContext com resultados dos testes (tal como a propriedade Outcome)
  6. Execute TestCleanup se implementado
  7. Execute DisposeAsync caso esteja implementado
  8. Executar Eliminar, se implementado