Выбор ответа Middle Тестирование и pytest обновлено

Тестирование кода, зависящего от времени

Вопрос

Функция возвращает «просрочен ли счёт», сравнивая срок с datetime.now(). Как сделать тест стабильным?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Передавать текущее время параметром или подменять часы. Зависимость от «сейчас» делает тест плавающим.

Варианты ответа

  1. Передавать текущее время параметром или подменять часыправильный ответ
  2. Запускать тест только в определённое время суток
  3. Добавить time.sleep перед проверкой срока
  4. Сравнивать с допуском в один день в обе стороны

Разбор

Зависимость от «сейчас» делает тест плавающим. Лучший вариант: функция принимает now аргументом (или объект часов), и тест передаёт фиксированное время. Если код менять нельзя, подменяют время библиотекой (freezegun, time-machine). sleep и допуски лишь маскируют проблему и замедляют тесты.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме