Разница в тесте JUnit между assertEquals() и Assert.assertEquals()

Я сделал метод для подсчета появления заданного символа в строке.

public Integer numberOf(String str, Character a){}

Я попытался проверить как обычно, используя:

@Test
public void test1(){
    Integer result = oc.numberOf("Lungimirante", 'u');
    Assert.assertEquals(1, result);
}

но Eclipse жалуется на это.

Я погуглил и обнаружил, что для проверки мне нужно использовать:

assertEquals(1, result); //it works correctly

вместо: Assert.assertEquals(1, result);

Не могли бы вы объяснить мне, почему? В чем разница?


person SwampThing    schedule 26.09.2017    source источник
comment
Вызовы метода assert[Equals,etc.] происходят из статического импорта класса junit.framework.Assert (или org.junit.Assert и т. д.). Скорее всего, у вас есть оператор import static junit.framework.Assert.* или аналогичный, но на самом деле вы не импортировали junit.framework.Assert.   -  person Mena    schedule 26.09.2017
comment
@Mena: да, чтобы использовать assertEquals я импортировал: import static org.junit.Assert.assertEquals; и до использования Assert.assertEqualsтолько импорт org.junit.Assert;   -  person SwampThing    schedule 26.09.2017
comment
Я ненавижу автобокс, и это одна из причин, почему. Получить NullPointerExceptions там, где вы их не ожидаете, — это другое. Из-за этого я настроил Eclipse так, чтобы случаи автобоксинга отображались как ошибки (и ИМХО это говорит само за себя, что для этого есть вариант, что я не так уж ошибаюсь в своем мнении)   -  person Lothar    schedule 26.09.2017


Ответы (1)


Вы не предоставляете никаких подробностей для этого:

Эклипс жалуется на это.

Подозреваю, что это Ambiguous method call...

введите здесь описание изображения

... это вызвано наличием нескольких «форм» assertEquals, некоторые из которых принимают int, некоторые long, некоторые Object, некоторые String и т. д. и т. д.

Итак, вам просто нужно четко указать, какой из них вы хотите использовать. Например, оба следующих вызова assertEquals компилируются, потому что они явно указывают тип аргумента expected и actual:

Integer result = oc.numberOf("Lungimirante", 'u');
Assert.assertEquals(new Integer(1), result);
Assert.assertEquals(1, result.intValue());
person glytching    schedule 26.09.2017
comment
:the пожаловаться: Метод assertEquals(Object, Object) неоднозначен для типа Assert - person SwampThing; 26.09.2017
comment
@SwampThing да, я так и предполагал, поэтому мой ответ имеет отношение к вашему вопросу. Просто настройте свои вызовы assertEquals (используя примеры, приведенные в моем ответе), чтобы вы четко понимали тип аргументов expected и actual. - person glytching; 26.09.2017