Выбор ответа Middle Тестирование и pytest обновлено
Тестирование кода, зависящего от времени
Вопрос
Функция возвращает «просрочен ли счёт», сравнивая срок с datetime.now(). Как сделать тест стабильным?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Передавать текущее время параметром или подменять часы. Зависимость от «сейчас» делает тест плавающим.
Варианты ответа
- Передавать текущее время параметром или подменять часыправильный ответ
- Запускать тест только в определённое время суток
- Добавить
time.sleepперед проверкой срока - Сравнивать с допуском в один день в обе стороны
Разбор
Зависимость от «сейчас» делает тест плавающим. Лучший вариант: функция принимает now аргументом (или объект часов), и тест передаёт фиксированное время. Если код менять нельзя, подменяют время библиотекой (freezegun, time-machine). sleep и допуски лишь маскируют проблему и замедляют тесты.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.