Как задать значение для LocalTime.now()?
Тестирую сервис при помощи JUnit 5 и Spring Test. В сервисе есть проверка: перед выполнением действия вытаскивается LocalTime.now() и проверяется, что сейчас меньше 11:00, в противном случае выбрасывается ошибка.
Сейчас на часах 22:42. А значит тесты будут валиться, пока я не дождусь полночи. Времени у меня не так много, поэтому хочу узнать: есть ли возможность задать определённое значение времени, чтобы оно возвращалось при вызове LocalTime.now()?
Я могу использовать класс Clock, но что мне с ним делать? Я же не смогу подменить часы в сервисе, а он будет обращаться к стандартным часам.
Ответы (1 шт):
Решил довольно просто, без изысков. Вынес получение времени из сервиса в отдельный утильный класс:
public class VoteUtil {
private static LocalTime endVoteTime = LocalTime.of(11, 0);
private VoteUtil() {
}
public static boolean isCanReVote() {
return LocalTime.now().isBefore(endVoteTime);
}
public static void prepareEndVoteTimeForPassTests() {
if (LocalTime.now().getHour() >= endVoteTime.getHour()) {
endVoteTime = LocalTime.of(23, 59);
}
}
public static void prepareEndVoteTimeForFailTests() {
if (LocalTime.now().getHour() < endVoteTime.getHour()) {
endVoteTime = LocalTime.of(0, 1);
}
}
}
Последние два метода - продвинутые сеттеры. Первый выставляет время так, чтобы тесты проходили, а второй - чтобы падали.