Анатомия теста
Если говорить просто, тест предназначен для проверки результата определённого поведения и подтверждения того, что этот результат соответствует ожидаемому. Поведение нельзя измерить эмпирически, поэтому написание тестов может быть непростой задачей.
«Поведение» — это то, как система действует в ответ на определённую ситуацию и/или стимулы. Но то, как именно или почему что-то происходит, не так важно, как то, что произошло.
Тест можно представить как состоящий из четырёх шагов:
- Подготовка
- Действие
- Проверка
- Очистка
Подготовка — это этап, на котором мы готовим всё необходимое для теста. Сюда входит практически всё, кроме самого «действия». Это как расставить костяшки домино, чтобы действие могло выполнить свою работу за один шаг, меняющий состояние. Это может включать подготовку объектов, запуск или остановку служб, добавление записей в базу данных и даже такие действия, как определение URL для запроса, создание учётных данных для ещё не существующего пользователя или просто ожидание завершения какого-либо процесса.
Действие — это единичное действие, меняющее состояние и запускающее поведение, которое мы хотим проверить. Это поведение изменяет состояние тестируемой системы (SUT), и именно получившееся изменённое состояние мы можем изучить, чтобы оценить поведение. Обычно это вызов функции или метода.
Проверка — это этап, на котором мы изучаем получившееся состояние и убеждаемся, что после завершения всех процессов оно выглядит так, как мы ожидали. Здесь мы собираем доказательства того, соответствует ли поведение нашим ожиданиям. В тесте assert мы выполняем измерение или наблюдение и применяем к нему свою оценку. Если что-то должно быть зелёным, мы говорим assert thing == "green".
Очистка — это этап, на котором тест приводит за собой всё в порядок, чтобы случайно не повлиять на другие тесты.
По сути, тест состоит из шагов действия и проверки, а шаг подготовки лишь задаёт контекст. Поведение возникает между действием и проверкой.
© 2015–2026 Holger Krekel and pytest-dev team
Licensed under the MIT License.
https://docs.pytest.org/en/stable/explanation/anatomy.html