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

Утверждение против JUnit Assertions

Сегодня я видел тестовый пример JUnit с утверждением java вместо утверждений JUnit. Есть ли существенные преимущества или недостатки, чтобы предпочесть друг другу?

4b9b3361

Ответ 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 по соображениям совместимости.