web-dev-qa-db-fra.com

Appel de méthode ambigu AssertEquals (Object, Object) dans Assert et assertEquals (double, double) dans Assert correspondent:

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?

21
java123999

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.

28
Bechyňák Petr

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);
3
M. Prokhorov

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);
1
Molten Ice