Question

Nous travaillons avec de grandes quantités de données, toutes marquées en UTC (en Java). Entre la lecture de ces données, leur stockage dans une base de données et leur extraction, il est apparu que certaines données étaient inactives une heure pendant l’heure avancée. Comme l’UTC n’a aucune notion de l’heure avancée, il s’agissait clairement d’un bogue dans le logiciel. Une fois connu, c'est facile à réparer.

Cependant, il serait intéressant de disposer de tests unitaires / d'intégration fonctionnant indépendamment de la différence de temps actuelle - par exemple. J'aimerais modifier le fuseau horaire local et exécuter plusieurs méthodes à l'intérieur de ces différents fuseaux horaires pour m'assurer que le temps UTC est traité correctement.

Les tests devant s'exécuter automatiquement et, de préférence, dans une suite de tests, je me demande comment tester au mieux le comportement correct. Il serait facile de modifier les paramètres locaux tels que le fuseau horaire lors du redémarrage de la machine virtuelle Java, mais l’exécuter dans une suite de tests n’est pas si facile.

Quelqu'un connaît-il un environnement de test, une bibliothèque ou un modèle prenant en charge ce scénario? Nous travaillons généralement avec JUnit, mais nous sommes ouverts à l’ajout d’un autre environnement ou d’une autre technique si cela aide à résoudre de tels problèmes. Je suppose que c'est plutôt un test d'intégration qu'un test unitaire.

Modifier : il existe déjà deux réponses très utiles, mais je suppose qu'il doit y avoir davantage de techniques. Quelqu'un at-il des informations faisant autorité sur le moment et la fréquence d'appels de TimeZone.getDefault (voir les commentaires pour les réponses de Jon Skeets)?

Remarque : même si cette question a une réponse acceptée, je ne savais pas trop quelle réponse accepter. Même avec cette acceptation, j'aimerais voir plus d'idées et de techniques.

Merci pour votre contribution!

Était-ce utile?

La solution

Je vous recommanderais de vérifier JodaTime , qui fournit un peu d'aide pour gérer Date / Les types de type Time / TimeZone sont plus lisibles dans votre code.

Nous les utilisons tout au long des tests et de la production, car la façon dont elle renforce l’API Java native pour les problèmes de date / heure est sans précédent. Leur utilisation dans les tests fonctionne bien dans JUnit

Autres conseils

Java vous permet de définir le fuseau horaire par défaut (java.util.TimeZone.setDefault). J'ai déjà écrit des tests pour régler le fuseau horaire sur différentes options et vérifier que tout fonctionne toujours. Soyez prudent, car si vous mettez en parallèle la plupart de vos tests unitaires, vous devrez les rendre séquentiels.

Je suggère que vous testiez dans certains fuseaux horaires où l’heure avancée est appliquée, et dans d’autres sans. L’utilisation d’un fuseau horaire australien est également une bonne chose, car l’heure d’été s'applique à l’heure opposée à l’hémisphère nord.

Quel est l'avis de la connexion aux serveurs de temps et de l'obtention des mises à jour?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top