Ambiguous method call Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match:

java123999 picture java123999 · Jan 27, 2017 · Viewed 30.9k times · Source

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 that getScore() returns a double:

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?

Answer

Bechyňák Petr picture Bechyňák Petr · Jan 27, 2017

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.