Выбор ответа Middle Тестирование: JUnit 5 и Mockito обновлено

Тест с текущим временем

Вопрос

Метод проверяет, истёк ли купон, через LocalDate.now(). Как сделать тест детерминированным?

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

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

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

Коротко

Правильный ответ: Внедрить Clock в класс и в тесте передать Clock.fixed(...). Время это внешняя зависимость.

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

  1. Запускать тест только в определённое время суток на CI
  2. Внедрить Clock в класс и в тесте передать Clock.fixed(...)правильный ответ
  3. Сравнивать результат с LocalDate.now() прямо в самом тесте
  4. Поставить Thread.sleep, чтобы дата сменилась

Разбор

Время это внешняя зависимость. Класс получает Clock через конструктор и вызывает LocalDate.now(clock), а тест подставляет фиксированные часы. Запуск по расписанию и sleep делают тест медленным и хрупким. Сравнение с now в тесте ломается около полуночи и повторяет логику кода вместо проверки.

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

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

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