В этом ответе есть два раздела - один об ошибке компиляции, а другой об использовании assertEquals ()
Проблема в том, что в двух разных пространствах имен есть два метода assertEquals () - один присутствует в пространстве имен org.junit.Assert, другой - в пространстве имен org.foo.bar.BarTest (текущее пространство имен).
Ошибка сообщается компилятором из-за правил теневого копирования , объявленных в спецификации языка Java . Статический импорт Assert.assertEquals () затеняется assertEquals (), объявленным в классе BarTest.
Исправление (всегда в случае теневых объявлений) заключается в использовании FQN (полных имен). Если вы собираетесь использовать assertEquals (...) класса JUnit Assert, используйте
org.junit.Assert.assertEquals(...)
и когда вам нужно использовать декларацию, просто используйте
assertEquals(...)
только в BarTest, где оно затенено. Во всех других классах, для которых требуется только Assert.assertEquals () или BarTest.asserEquals (), вы можете импортировать Assert или BarTest (я не думаю, что вам нужно будет импортировать BarTest в другое место, но, тем не менее, это указано).
Когда нет теневого копирования, вы можете позволить себе просто импортировать класс или статический метод и использовать его без FQN.
Дополнительные вещи, чтобы думать о
Assert.assertEquals () внутренне использует метод equals () классов аргументов. Объявление assertEquals () в вашем тестовом примере нарушает принцип DRY, так как метод типа equals () должен быть реализован и использоваться согласованно - две разные реализации в исходном коде и в модульных тестах неизбежно вызовут путаницу.
Наилучшим подходом было бы реализовать equals () на Bar, а затем использовать Assert.assertEquals () в ваших тестовых примерах. Если у вас уже есть, вам не нужен BarTest.assertEquals (). Псевдокод для assertEquals () похож на следующий
- Если оба аргумента равны нулю, вернуть true.
- Если Ожидается не равно нулю, то вызывать equals () для Ожидается , передавая фактический в качестве аргумента. Вернуть true, если объект равен.
- Если объекты не равны, выдается ошибка AssertionEr с отформатированным сообщением.