2010-12-01 4 views
1

Je veux obtenir la date du système actuel surchargé dans mes Junits.S'il vous plaît aider.Comment remplacer la date du système actuel dans les junits

+1

duplication possible de [Comment remplacer/contrôler la façon dont la JVM obtient la date du système?] (Http://stackoverflow.com/questions/2548922/how-to-override-control-the-way-the-jvm -gets-the-system-date) –

+0

Pouvez-vous préciser un peu plus comment obtenez-vous votre date afin de vous donner de meilleures réponses? – raspayu

+0

Nous utilisons une application de swing et nous avons un gestionnaire de calendrier de marché avec des commandes et des événements. Nous utilisons la date du calendrier pour obtenir notre date. – Shweta

Répondre

0

Pas vraiment une réponse, mais peut-être que votre code devrait être changé, plutôt que d'avoir à pirater l'objet date que vous venez de passer en date comme argument, de cette façon vous pouvez passer ce que vous voulez tester cette méthode/code. Une autre option serait de faire une interface de date, puis de se moquer de ce que vous voulez, mockito peut vous permettre de créer un objet date fictif si ce n'est pas définitif et que vous pourriez alors obtenir ce retour tout ce que vous voulez.

0

Je ne suis pas sûr de comment vous obtenez votre date de système, mais juste une idée: Avez-vous essayé d'utiliser Mocks (EasyMock/Mockito)?

+0

Non, je n'ai pas essayé cela, pouvez-vous s'il vous plaît dire comment utiliser Mocks – Shweta

1

Vous pouvez utiliser Powermock qui permet de se moquer des méthodes statiques et finales.

2

Une technique que j'utilise est de ne PAS appeler les méthodes/constructeurs d'usine de Date/Calendar, ni System.getCurrentTimeMillis. Au lieu de cela j'injecte une "usine" date/heure, à savoir une interface avec des méthodes pour tout ce dont j'ai besoin pour obtenir le temps du système.

Ensuite, pendant le test, j'injecte une instance que je contrôle directement (en codant l'heure, ou même en la stockant dans un fichier, en fonction de ce que je suis en train de tester). Sinon, j'injecte une implémentation qui effectue les appels réels appropriés au système.

Le travail n'est pas aussi important que cela en a l'air et rend le test de temps/code sensible à la date assez simple.

0

Si vous utilisez Joda time, vous pouvez utiliser override the time lors de la construction de DateTime et d'autres classes. En effet, vous utilisez Joda comme usine pour les objets de date et d'heure.

L'utilisation de Joda est très préférée à l'utilisation de la classe JDK Calendar mal conçue.

Questions connexes