Hamcrest & JUnit & Eclipse: сообщения об ошибках неправильно - PullRequest
0 голосов
/ 13 марта 2011

В настоящее время я использую Hamcrest 1.3RC поверх JUnit 4 поверх Eclipse Helios, и в Hamcrest меня беспокоит только одно: сообщения об ошибках неверны. Вместо «Ожидаемое: <ожидаемое значение>, но было: <фактическое значение>», я получаю «Ожидаемое: <фактическое значение>, но было: <ожидаемое значение>».

Я имею в виду, это не так уж и важно, но давай ^^ Неужели никто из разработчиков Hamcrest, которые делают такую ​​замечательную работу любым другим способом, заметил это? Или это ошибка, уникальная для моей среды? Просто скажите мне, если у вас это тоже есть или нет, или даже лучше, вы знаете способ исправить эту ошибку.

Я попробовал это и с Hamcrest 1.2, и с 1.3RC, но ни один не сделал это правильно. TIA для любой подсказки.

Некоторый код, иллюстрирующий проблему (имена частично немецкие, надеюсь, это не имеет значения):

Produkt p2 = pdao.getProdukt("Kekse");
assertNotNull(p2);
assertEquals(p2.getName(), "Kekse");
assertThat(p2.getPreis().doubleValue(), closeTo(2.57, 0.01));
assertEquals(p2.getFuellmenge(), 200);
assertEquals(p2.getFuelleinheit(), "G");
assertEquals(p2.isUeber18(), false);
assertEquals(p2.isAktiv(), true);

[EDIT2] Использование Hamcrest решило проблему исключительно. Теперь я буду избегать assertEquals (..., ...) в пользу assertThat (... is (...)).

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Я использую Hamcrest для Java и PHP, и у меня нет этой проблемы. Я подозреваю, что вы передаете ожидаемое значение перед фактическим значением, которое является старым способом утверждения xUnit. Hamcrest выбирает более читабельную структуру.

Вот упрощенная декларация для MatcherAssert.assertThat():

void assertThat(T actual, Matcher<T> matcher)

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

void assertThat(String reason, T actual, Matcher<T> matcher)

Вот несколько примеров:

assertThat(add(2, 4), is(6));
assertThat($fruit->hasSeeds(), is(true));
assertThat($fruit->getColor(), containsString('red'));

Всегда включайте исходный код в свой вопрос. Это увеличивает ваши шансы получить ответ и, что более важно, ответит правильно . ;)

0 голосов
/ 11 января 2012

Прочитайте документы API:

http://www.junit.org/apidocs/org/junit/Assert.html

Все методы JUnit assertXxx имеют ожидаемое первое значение, фактическое второе значение.Вы просто вызываете метод с параметрами в неправильном порядке.

Попробуйте

assertEquals("Kekse", p2.getName());

, и все будет в порядке.

В общем, это хороший совет: прочитайте документацию перед использованием API;)

...