Сегодня я увидел тестовый пример JUnit с утверждением java вместо утверждений JUnit - есть ли существенные преимущества или недостатки в предпочтении одного над другим?
java
junit
assert
assertions
Роберт
источник
источник
Ответы:
В JUnit4 исключение (на самом деле Error), вызванное утверждением JUnit, совпадает с ошибкой, вызванной
assert
ключевым словом java (AssertionError), поэтому оно точно такое же, какassertTrue
и трассировка стека, и кроме трассировки стека, вы не могли заметить разницу.При этом утверждения должны запускаться со специальным флагом в JVM, в результате чего многие тесты кажутся пройденными только потому, что кто-то забыл настроить систему с этим флагом при запуске тестов JUnit - нехорошо.
В общем, из-за этого я бы сказал, что использование JUnit
assertTrue
- лучшая практика, потому что он гарантирует запуск теста, обеспечивает согласованность (вы иногда используетеassertThat
или другие утверждения, которые не являются ключевыми словами java), и если поведение JUnit утверждает должен измениться в будущем (например, подключиться к какому-либо фильтру или другой будущей функции JUnit), ваш код сможет это использовать.Настоящая цель ключевого слова assert в java - отключить его без штрафа во время выполнения. Это не относится к модульным тестам.
источник
Я предпочитаю утверждения JUnit, поскольку они предлагают более богатый API, чем встроенный
assert
оператор, и, что более важно, не нуждаются в явном включении, в отличие от тогоassert
, для чего требуется-ea
аргумент JVM.источник
-ea
всегда включен, в немmvn test
нет необходимости-ea
. Более богатый апи, хороший улов. Иногда мне кажется, что API неправильно используется при тестировании, потому что он не является частью приложения (a в api), я предпочитаю называть его просто более богатыми методами.Когда тест не проходит, вы получаете дополнительную информацию.
assertEquals(1, 2);
приводит кjava.lang.AssertionError: expected:<1> but was:<2>
против
assert(1 == 2);
приводит кjava.lang.AssertionError
вы можете получить еще больше информации, если добавите аргумент сообщения в
assertEquals
источник
assert 1==2: "1 is not 2";
.assert
может быть предпочтительнее - для проверок правильности, которые могут повлиять на производительность и, следовательно, лучше всего отключены по умолчанию. Однако мой опыт показывает, что большинство утверждений должно быть постоянно.Я бы сказал, используйте утверждения JUnit в тестовых примерах и используйте утверждения Java в коде. Другими словами, реальный код никогда не должен иметь зависимостей JUnit, что очевидно, и если это тест, он должен использовать его варианты JUnit, а не assert.
источник
Я бы сказал, что если вы используете JUnit, вам следует использовать утверждения JUnit.
assertTrue()
в основном то же самое, что иassert
, иначе зачем вообще использовать JUnit?источник
Assert
потребуется больше шаблонов.assert
без JUnit вам потребуется написать целую структуру.Это может не применяться, если вы используете исключительно блестящие и новые вещи, но assert не был введен в Java до 1.4SE. Следовательно, если вы должны работать в среде со старой технологией, вы можете склоняться к JUnit по соображениям совместимости.
источник