Il y a plusieurs erreurs dans ton code:
1) tu compare des long, mais tu renvoie la réponse en virgule flottante. A partir d'un certain niveau, ton double ne pourra pas stocker autant de précision que le long, et tu obtiendras un résultat approximatif
2) tu utilise un Double (l'objet) et non un double (le type primitif). Du coup, comme tu fais un assertEquals(int, Double) et que cette méthode n'existe pas, java utilise la méthode assertEquals(Object, Object) après avoir promus ton int en Integer. Et un Integer, ce n'est pas une Double, donc ton test ne pourra qu'échouer
3) on ne compare jamais de int directement à des double en raison du problème de précision, on compare des doubles entre eux
4) pour une assertion entre les doubles, on utilise un delta, qui est la marge d'erreur tolérée.
Dans ton cas, ton code de test devrait être:
assertEquals(26783390001.0, StatisticTools.calculateTimeDifferenceInMilli(1375445968000l, 1378124307000l),0.001);
bien qu'il serait plus sage de revoir ta méthode pour qu'elle retourne un long. En effet, si tu teste ce code:
1 2 3 4 5
|
long l = 8523372036854775333l;
System.out.println(l);
System.out.println((double)l);
System.out.println((long)(double)l); |
tu verra qu'un long ça ne rentre pas dans un double
Partager