Переопределите Java System.currentTimeMillis для тестирования чувствительного ко времени кода

Есть ли способ, в коде или с аргументами JVM, переопределить текущее время, как представлено черезSystem.currentTimeMillisкроме ручного изменения системных часов на хост-машине?

Немного предыстории:

У нас есть система, которая запускает несколько заданий бухгалтерского учета, которые вращают большую часть своей логики вокруг текущей даты (то есть 1-го числа месяца, 1-го числа года и т. Д.)

К сожалению, многие устаревшие коды вызывают такие функции, какnew Date() или жеCalendar.getInstance(), оба из которых в конечном итоге призывают к.System.currentTimeMillis

В целях тестирования прямо сейчас мы застряли с ручным обновлением системных часов, чтобы манипулировать временем и датой, когда код считает, что тест выполняется.

Итак, мой вопрос:

Есть ли способ переопределить то, что возвращаетсяSystem.currentTimeMillis? Например, чтобы сказать JVM автоматически добавлять или вычитать некоторое смещение перед возвратом из этого метода?

Заранее спасибо!

Ответы на вопрос(11)

Ваш ответ на вопрос