Переопределите Java System.currentTimeMillis для тестирования чувствительного ко времени кода
Есть ли способ, в коде или с аргументами JVM, переопределить текущее время, как представлено черезSystem.currentTimeMillis
кроме ручного изменения системных часов на хост-машине?
Немного предыстории:
У нас есть система, которая запускает несколько заданий бухгалтерского учета, которые вращают большую часть своей логики вокруг текущей даты (то есть 1-го числа месяца, 1-го числа года и т. Д.)
К сожалению, многие устаревшие коды вызывают такие функции, какnew Date()
или жеCalendar.getInstance()
, оба из которых в конечном итоге призывают к.System.currentTimeMillis
В целях тестирования прямо сейчас мы застряли с ручным обновлением системных часов, чтобы манипулировать временем и датой, когда код считает, что тест выполняется.
Итак, мой вопрос:
Есть ли способ переопределить то, что возвращаетсяSystem.currentTimeMillis
? Например, чтобы сказать JVM автоматически добавлять или вычитать некоторое смещение перед возвратом из этого метода?
Заранее спасибо!