Je reçois l'erreur suivante:
Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
Pour cette ligne de code dans mes tests Junit
, notez que getScore
() renvoie un double
:
assertEquals(2.5, person.getScore());
Ceci est mon importation d'affirmation:
import static org.junit.Assert.*;
Quelle est la cause de cela et comment puis-je résoudre ce problème?
Je suppose que votre getScore () renvoie Double, pas double. Par conséquent, le compilateur est confus: doit-il convertir les deux arguments en objet, ou doit-il convertir uniquement le double en double?
double a = 2.0;
Double b = 2.0;
// assertEquals(a,b); // fails to compile
// the compiler is confused whether to use
assertEquals((Object) a,(Object) b); // OK
// or
assertEquals(a,(double) b); // OK
Quoi qu'il en soit, je définirais la méthode pour renvoyer le type primitif double.
Si vous êtes particulièrement intéressé par l'utilisation de Assert.assertEquals(double, double)
(la version primitive), essayez d'appeler la méthode surchargée qui permet la déviation et de définir la déviation autorisée à zéro, comme ceci:
assertEquals(2.5, person.getScore(), 0.0);
Vous pouvez également souhaiter que le troisième paramètre soit différent de zéro si person.getScore()
peut être légèrement différent de 2.5
. Par exemple, si 2.500001
Est acceptable, votre test devient
assertEquals(2.5, person.getScore(), 0.000001);
Si vous souhaitez spécifiquement éviter la conversion ET utiliser la version primitive, vous pouvez obtenir le résultat primitif d'un objet wrapper. Par exemple:
double a = 2.0;
Double b = 2.0;
assertEquals(a, b.doubleValue()); //Deprecated so use the one with delta
Integer c = 2;
int d = 2;
assertEquals(c.intValue(), d);
Long e = 2L;
long f = 2L;
assertEquals(e.longValue(), f);