Утверждение против JUnit Утверждения - PullRequest
70 голосов
/ 03 июня 2010

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

Ответы [ 6 ]

86 голосов
/ 03 июня 2010

В JUnit4 исключение (на самом деле ошибка), генерируемое утверждением JUnit, совпадает с ошибкой, генерируемой ключевым словом java assert (AssertionError), поэтому оно точно такое же, как assertTrue и отличается от трассировки стека Вы не могли бы отличить.

При этом утверждения должны запускаться со специальным флагом в JVM, в результате чего многие тесты кажутся проходящими просто потому, что кто-то забыл настроить систему с этим флагом при запуске тестов JUnit - не хорошо.

В целом, из-за этого, я бы сказал, что использование JUnit assertTrue является лучшей практикой, поскольку гарантирует выполнение теста, обеспечивает согласованность (иногда вы используете assertThat или другие утверждения, которые не являются Java). ключевое слово), и если поведение утверждений JUnit изменится в будущем (например, подключение к какому-либо фильтру или другой будущей функции JUnit), ваш код сможет использовать это.

Настоящая цель ключевого слова assert в java - его отключение без штрафа за время выполнения. Это не относится к юнит-тестам.

25 голосов
/ 03 июня 2010

Я предпочитаю утверждения JUnit, поскольку они предлагают более богатый API, чем встроенный оператор assert, и, что более важно, не требуют явного включения в отличие от assert, для которого требуется аргумент -ea JVM.

15 голосов
/ 07 июня 2011

Если тест не пройден, вы получаете дополнительную информацию.

assertEquals(1, 2); приводит к java.lang.AssertionError: expected:<1> but was:<2>

против

assert(1 == 2); приводит к java.lang.AssertionError

вы можете получить еще больше информации, если добавите аргумент сообщения в assertEquals

6 голосов
/ 28 апреля 2012

Я бы сказал, использовать утверждения JUnit в тестовых случаях и использовать утверждение Java в коде. Другими словами, реальный код никогда не должен иметь зависимостей JUnit, что очевидно, и если это тест, он должен использовать его вариации JUnit, а не утверждение.

0 голосов
/ 03 июня 2010

Это может не применяться, если вы используете исключительно блестящие и новые вещи, но assert не была введена в Java до 1.4SE. Поэтому, если вы должны работать в среде с более старой технологией, вы можете склониться к JUnit по соображениям совместимости.

0 голосов
/ 03 июня 2010

Я бы сказал, что если вы используете JUnit, вы должны использовать утверждения JUnit. assertTrue() в основном то же самое, что и assert, иначе зачем вообще использовать JUnit?

...