89 votes

Comparer des objets datés avec différents niveaux de précision

J'ai un test JUnit qui échoue parce que les millisecondes sont différentes. Dans ce cas, je ne me soucie pas des millisecondes. Comment puis-je changer la précision de l'assert pour ignorer les millisecondes (ou toute autre précision que je voudrais qu'elle soit définie) ?

Exemple d'une assertion défaillante que je voudrais faire passer :

Date dateOne = new Date();
dateOne.setTime(61202516585000L);
Date dateTwo = new Date();
dateTwo.setTime(61202516585123L);
assertEquals(dateOne, dateTwo);

71voto

Esko Points 15578

Encore une autre solution de contournement, je ferais comme ça :

assertTrue("Dates aren't close enough to each other!", (date2.getTime() - date1.getTime()) < 1000);

70voto

Dan Watt Points 206

Si vous avez Apache commons-lang dans votre classpath, vous pouvez utiliser DateUtils.truncate pour arrondir les dates à un champ quelconque.

assertEquals(DateUtils.truncate(date1,Calendar.SECOND),
             DateUtils.truncate(date2,Calendar.SECOND));

25voto

Joachim Sauer Points 133411

Utilisez un DateFormat avec un format qui ne montre que les parties que vous voulez faire correspondre et faire un assertEquals() sur les chaînes de caractères résultantes. Vous pouvez aussi facilement emballer cela dans votre propre assertDatesAlmostEqual() méthode.

7voto

Seth Points 2105

Vous pourriez faire quelque chose comme ça :

assertTrue((date1.getTime()/1000) == (date2.getTime()/1000));

Aucune comparaison de chaînes n'est nécessaire.

4voto

Michael Easter Points 7482

Je ne sais pas s'il y a un support dans JUnit, mais une façon de le faire :

import java.text.SimpleDateFormat;
import java.util.Date;

public class Example {

    private static SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");

    private static boolean assertEqualDates(Date date1, Date date2) {
        String d1 = formatter.format(date1);            
        String d2 = formatter.format(date2);            
        return d1.equals(d2);
    }    

    public static void main(String[] args) {
        Date date1 = new Date();
        Date date2 = new Date();

        if (assertEqualDates(date1,date2)) { System.out.println("true!"); }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X