Ir al contenido principal

Entradas

Mostrando entradas de agosto, 2010

"Mocking the Time": Probando métodos que dependen de la fecha

En todos los proyectos aparecen métodos que necesitan realizar comprobaciones de fechas u horas en la lógica de negocio, ya sea consultando la hora actual del sistema, ya sea comparando rangos horarios. Si antes de implementar el método le damos un pensada a cómo probarlo, aparece una duda importante: ¿cómo puedo suplantar la fecha o la hora para que mis tests no dependan del día o la hora actuales? Pongamos un ejemplo sencillo: tenemos un método que si lo ejecutamos en un día par, tiene que llamar a un servicio externo. Una primera implementación, sin pensar cómo probarlo, nos daría un código parecido a: [...] public class TimeService { private IExternalService externalService = null; public void timeMethod() { Calendar cal = Calendar.getInstance(); if (cal.get(Calendar.DAY_OF_MONTH) % 2 == 0) { externalService.externalMethod(); } } [...] } Un código sencillo... ¡que resulta imposible de probar correctamente ! Como se pued