Pregunta

Estamos trabajando con grandes cantidades de datos, todos etiquetados en UTC (en Java). Entre leer estos datos, almacenarlos en una base de datos y sacarlos nuevamente, sucedió que algunos datos estuvieron apagados una hora durante el horario de verano. Como UTC no tiene el concepto de horario de verano, esto fue claramente un error dentro del software. Una vez conocido, es fácil de arreglar.

Sin embargo, sería bueno tener algunas pruebas de unidad / integración que funcionen independientemente de la diferencia horaria actual, p. ej. Me gustaría cambiar la zona horaria local y ejecutar algunos métodos una y otra vez dentro de estas zonas horarias diferentes para asegurarme de que UTC se maneja correctamente.

Como las pruebas deberían ejecutarse automáticamente y, preferiblemente, dentro de un Testsuite, me pregunto cómo evaluar mejor el comportamiento correcto. Sería fácil cambiar la configuración local como la zona horaria al reiniciar la JVM, pero ejecutar esto dentro de un conjunto de pruebas no es tan fácil.

¿Alguien sabe de un entorno de prueba, biblioteca o patrón que soporte este escenario? Por lo general, estamos trabajando con JUnit, pero estamos abiertos a agregar otro entorno / técnica si ayuda a deshacerse de problemas como este. Supongo que es más bien una prueba de integración que de unidad.

Editar : ya hay dos respuestas muy útiles, pero creo que debe haber más técnicas disponibles. ¿Alguien tiene información autorizada sobre cuándo / con qué frecuencia se llamará a TimeZone.getDefault (vea los comentarios para las respuestas de Jon Skeets)?

Nota : aunque esta pregunta tiene una respuesta aceptada, no estaba completamente seguro de qué respuesta aceptar. Incluso con esta aceptación, me gustaría ver más ideas y técnicas.

¡Gracias por su aporte!

¿Fue útil?

Solución

Recomiendo que eche un vistazo a JodaTime que proporciona algo de azúcar para ayudar a administrar Fecha / Los problemas de tipo Time / TimeZone son más legibles en su código.

Los utilizamos durante la prueba y la producción, ya que la forma en que aumenta la API nativa de Java para problemas de fecha / hora no tiene paralelo. El uso de estos en las pruebas funciona bien en JUnit

Otros consejos

Java le permite establecer la zona horaria predeterminada (java.util.TimeZone.setDefault). He escrito pruebas antes para configurar la zona horaria en una variedad de opciones diferentes y verificar que todo siga funcionando. Sin embargo, tenga cuidado: si está comparando paralelamente la mayoría de sus pruebas unitarias, deberá hacerlas secuenciales.

Le sugiero que pruebe en algunas zonas horarias con el horario de verano, y otras sin. El uso de una zona horaria australiana también es bueno, ya que el horario de verano se aplica en la época opuesta del año al hemisferio norte.

¿Cuál es la opinión acerca de conectarse a servidores de tiempo y obtener actualizaciones?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top