Ambiguous method call Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match:
Solution 1
Your getScore() returns Double
, not double
. Therefore compiler is confused: Should it convert both arguments to Object, or if it should convert only the Double to 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
Anyway, I would set the method to return primitive type double.
Solution 2
If you specifically interested in using Assert.assertEquals(double, double)
(the primitive version), try calling overridden method that allows deviation and setting allowed deviation to zero, like this:
assertEquals(2.5, person.getScore(), 0.0);
You might also want to have third parameter to be something other than zero if person.getScore()
is allowed to be slightly different from 2.5
. For example, if 2.500001
is acceptable, then your test becomes
assertEquals(2.5, person.getScore(), 0.000001);
Solution 3
If you specifically want to avoid casting AND use the primitive version, you can get the primitive result from a wrapper object. For example:
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);
java123999
Updated on March 26, 2021Comments
-
java123999 about 3 years
I am getting the following error:
Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
For this line of code in my
Junit
tests, note thatgetScore
() returns adouble
:assertEquals(2.5, person.getScore());
This is my assert import:
import static org.junit.Assert.*;
What is causing this and how can I fix this?