Выбор ответа Middle Тестирование: JUnit 5 и Mockito обновлено
Тест с текущим временем
Вопрос
Метод проверяет, истёк ли купон, через LocalDate.now(). Как сделать тест детерминированным?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Внедрить Clock в класс и в тесте передать Clock.fixed(...). Время это внешняя зависимость.
Варианты ответа
- Запускать тест только в определённое время суток на CI
- Внедрить
Clockв класс и в тесте передатьClock.fixed(...)правильный ответ - Сравнивать результат с
LocalDate.now()прямо в самом тесте - Поставить
Thread.sleep, чтобы дата сменилась
Разбор
Время это внешняя зависимость. Класс получает Clock через конструктор и вызывает LocalDate.now(clock), а тест подставляет фиксированные часы. Запуск по расписанию и sleep делают тест медленным и хрупким. Сравнение с now в тесте ломается около полуночи и повторяет логику кода вместо проверки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.