Comment puis-je écrire des tests unitaires pour s'assurer que mon de date/heure en fonction du code qui fonctionne pour tous les fuseaux horaires et/sortir de l'heure d'été?
Je suis en utilisant JodaTime 2.1 et je suis à la recherche d'un modèle de test de l'unité de code qui effectue la date/l'heure des opérations pour s'assurer qu'il se comporte bien pour tous les fuseaux horaires et indépendant de D'heure d'été.
Spécifiquement:
- Comment se moquer de l'horloge système (donc je n'ai pas pour se moquer de tous les lieux où je les appel
new DateTime()
pour obtenir l'heure actuelle) - Comment puis-je faire de même pour le fuseau horaire par défaut?
double possible de Faire des tests unitaires avec les dates de passage dans tous les fuseaux horaires et/sortir de l'heure d'été
Ce n'est pas un doublon; il s'agit d'un suivi.
Ce n'est pas un doublon; il s'agit d'un suivi.
OriginalL'auteur Aaron Digulla | 2012-06-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un
@Rule
pour cela. Voici le code de la règle:Vous pouvez utiliser la règle comme ceci:
Cela va changer le fuseau horaire UTC avant chaque test dans
SomeTest
sera exécuté, et il sera de restaurer le fuseau horaire par défaut après chaque test.Si vous voulez vérifier plusieurs fuseaux horaires, l'utilisation d'une règle comme celle-ci:
Mettre tous les concernés tests dans une classe de base abstraite
AbstractTZTest
et de l'étendre:À exécuter tous les tests
AbstractTZTest
avec UTC. Pour chaque fuseau horaire que vous voulez tester, vous aurez besoin d'une autre classe:Depuis les cas de test sont héréditaires, c'est tout - vous avez juste besoin de définir la règle.
D'une manière similaire, vous pouvez changer le système de l'horloge. L'utilisation d'une règle qui appelle
DateTimeUtils.setCurrentMillisProvider(...)
pour simuler que le test s'exécute à un certain moment etDateTimeUtils.setCurrentMillisSystem()
pour restaurer les valeurs par défaut.Remarque: Votre fournisseur aura besoin d'un moyen de faire de l'horloge ou de tous les nouveaux
DateTime
instances ont la même valeur. J'ai souvent l'avance la valeur d'un millième de seconde à chaque foisgetMillis()
est appelé.Note 2: cela ne fonctionne Qu'avec joda-time. Il n'affecte pas les
new java.util.Date()
.Note 3: Vous ne pouvez pas exécuter ces tests en parallèle plus. Ils doivent être exécutées en séquence ou l'un d'eux sera plus susceptible de restaurer le fuseau horaire par défaut, tandis qu'un autre est en cours.
Correct. Si vous souhaitez exécuter des tests en parallèle, vous devez regrouper les tests qui ont besoin de cette règle en quelque sorte et l'exécution de la règle dans l'ensemble du groupe.
OriginalL'auteur Aaron Digulla
Changer pour un seul test
OriginalL'auteur Ilya