0

Неоднозначный вызов метода: обе методы assertEquals(Object, Object) и assertEquals(double, double) в Assert совпадают

2

Я получаю следующую ошибку:

Обе версии метода assertEquals(Object, Object) в классе Assert и assertEquals(double, double) в классе Assert совпадают

Эта ошибка возникает на строке кода в моих тестах Junit, где метод getScore() возвращает значение типа double:

assertEquals(2.5, person.getScore());

Вот импорт для assert в моем коде:

import static org.junit.Assert.*;

Что вызывает эту проблему и как я могу ее исправить?

4 ответ(ов)

0

Если вы хотите избежать приведения типов и использовать примитивные версии, вы можете получить примитивное значение из объекта-обертки. Например:

double a = 2.0;
Double b = 2.0;
assertEquals(a, b.doubleValue()); // Устарело, используйте метод с дельтой

Integer c = 2;
int d = 2;
assertEquals(c.intValue(), d);

Long e = 2L;
long f = 2L;
assertEquals(e.longValue(), f);

Таким образом, вы можете безопасно сравнивать примитивные значения и их соответствующие обертки, не прибегая к явному приведению типов.

0

У меня была такая же ошибка. Я изменил код с такого:

assertEquals("Server status code is: " + wmResp.getStatusCode(), 200, wmResp.getStatusCode());

На такой:

assertEquals("Server status code is: " + wmResp.getStatusCode(), Integer.valueOf(200), wmResp.getStatusCode());

Это происходит, потому что в первой строке компилятор воспринимает 200 как примитивный тип (int), а не как объект класса Integer.

0

Ваш метод getScore() возвращает Double, а не double. Поэтому компилятор запутывается: ему нужно решить, следует ли преобразовать оба аргумента в Object, или же преобразовывать только Double в double.

Рассмотрим ваш код:

double a = 2.0;
Double b = 2.0;
// assertEquals(a,b); // не компилируется
// компилятор не знает, что использовать
assertEquals((Object) a, (Object) b); // ОК
// или
assertEquals(a, (double) b); // ОК

В любом случае, я бы рекомендовал изменить возвращаемый тип метода на примитивный тип double. Это поможет избежать путаницы и сделает ваш код более читаемым и понятным.

0

Если вас интересует использование метода Assert.assertEquals(double, double) (примитивной версии), попробуйте вызвать перегруженный метод, который позволяет задавать допустимое отклонение, установив его в ноль, например так:

assertEquals(2.5, person.getScore(), 0.0);

Также вы можете установить третий параметр равным чему-то, отличному от нуля, если значение person.getScore() может немного отличаться от 2.5. Например, если значение 2.500001 допустимо, тогда ваш тест будет выглядеть следующим образом:

assertEquals(2.5, person.getScore(), 0.000001);
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь