Как писать Unit-тесты с Joda-Time? В идеале, нам нужно зафиксировать время, чтобы все последующие вызовы DateTime.now() возвращали одну и ту же фиксированную дату и одно и то же фиксированное время и не зависели от настоящей даты и времени, установленной на компьютере.
Для этого нужно использовать метод:
1 2 3 |
DateTimeUtils.setCurrentMillisFixed( new DateTime(2018, 7, 9, 18, 48, 0, DateTimeZone.UTC) .getMillis()); |
Вызов подобного метода задаёт фиксированное значение времени для всех последующих запросов даты и времени с помощью классов библиотеки Joda-Time. Обратите внимание, что он НЕ меняет системное время компьютера. Более того, даже внутри Java вы всё ещё можете получить системное время, если будете использовать java.util.Date, Calendar и подобные классы.
Лучше всего поместить этот вызов куда-нибудь в @Before:
1 2 3 |
DateTimeUtils.setCurrentMillisFixed( new DateTime(2018, 7, 9, 18, 48, 0, DateTimeZone.UTC) .getMillis()); |
По окончании тесты лучше вернуть обратно:
1 2 3 4 |
@After public void backToSystemTime() { DateTimeUtils.setCurrentMillisSystem(); } |
Вот так.
А Мокитой не проще?