2017-01-27 12 views
4

Я получаю следующее сообщение об ошибке:Неоднозначный вызов метода Оба assertEquals (Object, Object) в Assert и assertEquals (двойные, двойные) в Assert матча:

Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match 

Для этой строки кода в моих Junit тестов, обратите внимание, что getScore() возвращает double:

assertEquals(2.5, person.getScore()); 

Это мой импорт утверждают:

import static org.junit.Assert.*; 

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

ответ

9

Я предполагаю, что ваш getScore() возвращает двойной, а не в два раза. Поэтому компилятор запутался: должен ли он преобразовать оба аргумента в Object, или он должен преобразовать только Double в 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 

В любом случае, я бы установил метод для возвращения примитивного типа 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^