Анатомия теста¶
Проще говоря, тест предназначен для того, чтобы посмотреть на результат определенного поведения и убедиться, что этот результат соответствует тому, что вы ожидаете. Поведение - это не то, что можно измерить эмпирически, поэтому написание тестов может быть сложной задачей.
«Поведение» - это способ, которым некоторая система действует в ответ на определенную ситуацию и/или стимулы. Но то, как или почему что-то сделано, не так важно, как то, что было сделано.
Можно считать, что тест состоит из четырех этапов:
Арсенал
Акт
Ассерт
Очистка
Аранжировка - это место, где мы готовим все для нашего теста. Это означает практически все, кроме «акта». Это выстраивание домино так, чтобы акт мог выполнить свою задачу за один шаг, изменяющий состояние. Это может означать подготовку объектов, запуск/завершение служб, ввод записей в базу данных или даже такие вещи, как определение URL для запроса, генерация учетных данных для еще не существующего пользователя или просто ожидание завершения какого-либо процесса.
Акт - это единичное действие, изменяющее состояние, которое запускает поведение, которое мы хотим протестировать. Это поведение выполняет изменение состояния тестируемой системы (SUT), и именно на результирующее измененное состояние мы можем посмотреть, чтобы сделать вывод о поведении. Обычно это поведение принимает форму вызова функции/метода.
Assert - это место, где мы смотрим на результирующее состояние и проверяем, выглядит ли оно так, как мы ожидали после того, как осядет пыль. Именно здесь мы собираем доказательства того, что поведение соответствует или не соответствует нашим ожиданиям. assert
в нашем тесте - это место, где мы берем это измерение/наблюдение и применяем к нему наше суждение. Если что-то должно быть зеленым, мы говорим assert thing == "green"
.
Cleanup - это место, где тест убирает за собой, чтобы другие тесты случайно не попали под его влияние.
По своей сути тест состоит из шагов act и assert, а шаг arrange только обеспечивает контекст. Поведение существует между act и assert.