Сегодня я видел тестовый пример JUnit с утверждением java вместо утверждений JUnit. Есть ли существенные преимущества или недостатки, чтобы предпочесть друг другу?
Утверждение против JUnit Assertions
Ответ 1
В JUnit4 исключение (фактически ошибка), выданное утверждением JUnit, совпадает с ошибкой, генерируемой ключевым словом java assert
(AssertionError), так что она точно такая же, как и assertTrue
, и за исключением трассировки стека вы не могли сказать разницы.
Утверждается, что утверждения должны запускаться со специальным флагом в JVM, что приводит к тому, что многие тесты будут отображаться только потому, что кто-то забыл настроить систему с этим флагом при запуске тестов JUnit - не очень хорошо.
В общем, из-за этого я бы сказал, что использование JUnit assertTrue
является лучшей практикой, поскольку оно гарантирует, что тест запущен, обеспечивает согласованность (иногда вы используете assertThat
или другие утверждения, которые не являются java ключевое слово), и если поведение утверждений JUnit должно измениться в будущем (например, подключиться к некоторому фильтру или другой будущей функции JUnit), ваш код сможет использовать это.
Реальная цель ключевого слова assert в java заключается в том, чтобы отключить его без штрафа за выполнение. Это не относится к модульным тестам.
Ответ 2
Я предпочитаю утверждения JUnit, поскольку они предлагают более богатый API, чем встроенный оператор assert
и, что более важно, не нужно явно включать в отличие от assert
, для чего требуется аргумент -ea
JVM.
Ответ 3
Когда тест не проходит, вы получаете больше информации.
assertEquals(1, 2);
приводит к java.lang.AssertionError: expected:<1> but was:<2>
против
assert(1 == 2);
приводит к java.lang.AssertionError
вы можете получить еще больше информации, если добавить аргумент сообщения в assertEquals
Ответ 4
Я бы сказал, что JUnit утверждает в тестовых случаях и использует java assert в коде. Другими словами, у реального кода никогда не должно быть зависимостей JUnit, как очевидно, и если это тест, он должен использовать вариации JUnit, никогда не утверждая.
Ответ 5
Я бы сказал, что если вы используете JUnit, вы должны использовать утверждения JUnit. assertTrue()
в основном совпадает с assert
, иначе зачем использовать JUnit?
Ответ 6
Это может не примениться, если вы используете исключительно блестящие и новые вещи, но утверждение не было введено в Java до 1.4SE. Поэтому, если вы должны работать в среде со старыми технологиями, вы можете склониться к JUnit по соображениям совместимости.