Поделиться через


Жизненный цикл MSTest

MSTest предоставляет четко определенный жизненный цикл для классов тестов и методов тестирования, что позволяет выполнять операции установки и удаления на различных этапах процесса выполнения теста. Жизненный цикл можно сгруппировать на следующие три этапа:

  • Жизненный цикл на уровне сборки
  • Жизненный цикл на уровне класса
  • Жизненный цикл тестов

Выполнение событий жизненного цикла происходит с самого высокого уровня (сборки) до самого низкого уровня (метод тестирования). Порядок выполнения выглядит следующим образом:

  1. Инициализация сборки
  2. Инициализация классов (для каждого тестового класса)
  3. Инициализация теста (для каждого метода теста)
  4. Выполнение тестов
  5. Очистка теста (для каждого метода теста)
  6. Очистка классов (для каждого тестового класса)
  7. Очистка сборки

Жизненный цикл уровня сборки

Жизненный цикл сборки описывает жизненный цикл всей сборки, включающую все классы и методы тестирования. Для управления жизненным циклом сборки MSTest предоставляет атрибуты AssemblyInitialize и AssemblyCleanup . Дополнительные сведения об этих атрибутах см. в документации о AssemblyInitialize и AssemblyCleanup.

Жизненный цикл уровня класса

Жизненный цикл класса теста относится к жизненному циклу отдельных классов тестов в сборке и может быть реализован с помощью атрибутов ClassInitialize и ClassCleanup . Эти атрибуты позволяют определять методы настройки и демонтажа, которые выполняются до и после всех тестов в классе соответственно. Дополнительные сведения об этих атрибутах см. документацию ClassInitialize и ClassCleanup. Жизненный цикл на уровне класса выполняется только один раз для каждого класса, независимо от количества тестов в этом классе.

Жизненный цикл уровня тестирования

Жизненный цикл уровня теста выполняется для каждого метода теста. Для параметризованных тестов каждый набор параметров рассматривается как отдельный метод тестирования, а жизненный цикл выполняется для каждого набора параметров. Жизненный цикл тестового уровня можно сгруппировать в такие этапы, как настройка, выполнение и очистка, при этом как настройка, так и очистка поддерживают несколько способов реализации.

Настройка

Этап установки жизненного цикла тестов отвечает за подготовку тестовой среды перед выполнением каждого метода теста. Это можно сделать с помощью TestInitialize атрибута или реализации конструктора в тестовом классе. В случае наследования выполнение TestInitialize методов следует порядку из базового класса в производный класс. Если тестовый класс реализует конструктор, он выполняется перед методом TestInitialize . Дополнительные сведения об атрибуте TestInitialize см. в документации по атрибуту уровня теста .

Замечание

В отличие от конструктора классов, TestInitialize методы могут быть асинхронным, а также поддерживать использование атрибутов, таких как TimeoutAttribute.

Исполнение

Этап выполнения — это этап, в котором выполняется фактический метод тестирования. Если метод теста возвращает Task или ValueTask, выполнение метода будет ожидаться.

Предупреждение

В случае асинхронных методов тестирования SynchronizationContext не предоставляется. Это не относится к UITestMethod тестам для UWP и WinUI, так как они выполняются на потоке UI с SynchronizationContext.

Уборка

Этап очистки жизненного цикла тестов отвечает за очистку тестовой среды после выполнения каждого метода теста. Это можно сделать с помощью атрибута TestCleanup или реализации IDisposable/IAsyncDisposable интерфейса в тестовом классе. Если тестовый класс реализует IDisposable или IAsyncDisposable, его метод Dispose/DisposeAsync выполняется после метода TestCleanup. В случае наследования выполнение TestCleanup методов следует порядку из производного класса в базовый класс. Дополнительные сведения об атрибуте TestInitialize см. в документации по атрибуту уровня теста .

Заказ

Полный порядок жизненного цикла тестового уровня выглядит следующим образом:

  1. Создание экземпляра тестового класса
  2. Задать TestContext свойство, если присутствует
  3. Запустите TestInitialize (если реализовано)
  4. Выполнение метода тестирования
  5. Обновление TestContext с помощью результатов теста (например Outcome , свойства)
  6. Запуск TestCleanup при реализации
  7. Запустите DisposeAsync, если реализовано
  8. Выполните Dispose, если он реализован