Sobrescriba Java System.currentTimeMillis para probar código sensible al tiempo
¿Hay alguna forma, ya sea en código o con argumentos JVM, para anular la hora actual, como se presenta a través deSystem.currentTimeMillis
, ¿aparte de cambiar manualmente el reloj del sistema en la máquina host?
Un poco de fondo:
Tenemos un sistema que ejecuta una serie de trabajos contables que giran en gran parte de su lógica en torno a la fecha actual (es decir, el primer día del mes, el primero del año, etc.)
Desafortunadamente, una gran parte del código heredado llama a funciones comonew Date()
oCalendar.getInstance()
, los cuales eventualmente llaman aSystem.currentTimeMillis
.
Para propósitos de prueba, en este momento, estamos atascados con la actualización manual del reloj del sistema para manipular la hora y la fecha en que el código cree que se está ejecutando la prueba.
Así que mi pregunta es:
¿Hay una manera de anular lo que se devuelve porSystem.currentTimeMillis
? Por ejemplo, ¿para decirle a la JVM que agregue o reste automáticamente alguna compensación antes de regresar de ese método?
¡Gracias por adelantado!