Подтвердить что ты не робот

Методы утверждения JUnit должны быть сформулированы в положительном или отрицательном?

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

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

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

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

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

4b9b3361

Ответ 1

Как насчет:

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

Работает в обоих направлениях.

Ответ 2

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

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

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

Причины:

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

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

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

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

Другое направление - исправление кода все более ненужным материалом - это путь к адскому программированию.

Ответ 3

Хорошо, вы могли бы также изложить ваше предположение, а затем как предположение не выполнялось. Например:

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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