JUnit методы утверждения должны быть сформулированы в положительном или отрицательном? - PullRequest
12 голосов
/ 25 августа 2010

Должен ли я писать
assertTrue("User logged in", user.isLoggedIn());
или
assertTrue("User is not logged in", user.isLoggedIn());

Первый обеспечивает лучшее чтение внутри исходных файлов:
«Я утверждаю, что верно следующее: Пользователь вошел в систему.»

Сообщение об ошибке можно прочитать в обоих направлениях:
java.lang.AssertionError: User logged in
«При подтверждении того, что пользователь вошел в систему, произошла ошибка»
«Ошибка в том, что пользователь вошел в систему.»

Документация JUnit не содержит четкого руководства, каким оно должно быть, за исключением
«идентифицирующее сообщение для {@link AssertionError}»,
И в обоих случаях текст идентифицирует выполняемый тест.

Какое общее использование?

Ответы [ 7 ]

9 голосов
/ 25 августа 2010

Как насчет:

assertTrue("User should be logged in", user.isLoggedIn());

Работает в обе стороны.

3 голосов
/ 09 мая 2014

Будьте строго положительными в ваших сообщениях об утверждении

Используйте положительный текст подтверждения, как в первом примере, или как:

assertTrue("User is logged in", user.isLoggedIn());

Причины:

  • положительное утверждение короче
  • есть одно проверенное условие, которое вы проверяете, и множество возможных причин, почему оно пошло не так.Не пытайтесь определить причину, просто укажите, какое утверждение не удалось.
  • оно более читабельно в вашем коде.Обычно рекомендуется кодировать в положительных выражениях, которые сохраняют несколько отрицаний условий в уме читателя.
  • это все еще читается в следах ошибок, которые не должны быть поняты обычным пользователем, нопрограммист, который все равно окажется в коде.И даже системный администратор, который не будет иметь доступа к коду, предоставит автору полное сообщение об ошибке, и программист поймет, что это исходит из утверждения.

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

Знаете, хорошие программисты отлаживают код и предоставляют рабочий и более короткий код .

Возьмите, используя положительные сообщения об утверждениикак первое, что нужно сделать в этом направлении.

Другое направление - исправление кода все большим количеством ненужных вещей прокладывает путь в адский мир программирования.

2 голосов
/ 25 августа 2010

Ну, вы также можете высказать свое предположение, а затем, как это предположение не выполнялось. Вот так:

assertTrue("Expected user to be logged it, and wasn't", user.isLoggedIn());

Делает для более четких сообщений, но дольше печатать и читать.

1 голос
/ 25 августа 2010

Чтобы избежать этого вопроса, я все чаще склоняюсь к использованию assertThat вместо методов низкого уровня assert *. Действительно, как эта статья объясняет, assertThat даст вам очень четкое сообщение об ошибке в случае сбоя.

0 голосов
/ 25 августа 2010

Интересно, я бы использовал:

assertTrue("user should be logged in", user.isLoggedIn());

, который говорит мне, каково ожидаемое состояние этого утверждения.

Я думаю, что лучший выбор - тот, который вы понимаете.

0 голосов
/ 25 августа 2010

Вы можете использовать:

assertTrue("Test if user is logged in", user.isLoggedIn());

Когда вы делаете это, вы проверяете, что user.isLoggedIn() верно, вы не можете сказать, что пользователь вошел в систему или нет, вы незнаете, вы просто тестируете это.

0 голосов
/ 25 августа 2010

Вы должны включить оба случая.У вас есть лучший тестовый случай, когда вы триангулируете свои утверждения.

...