Сегодня я видел тестовый пример JUnit с утверждением java вместо утверждений JUnit. Есть ли существенные преимущества или недостатки, чтобы отдать предпочтение одному другому?утверждают против JUnit Assertions
ответ
В JUnit4 исключение (на самом деле ошибка), отбрасываемая JUnit утверждают одно и то же, как ошибка, брошенной в Java assert
ключевое слово (AssertionError), так что это точно так же, как assertTrue
и, кроме трассировки стека вы не мог» t сказать разницу.
Считается, что утверждения должны запускаться со специальным флагом в JVM, что приводит к тому, что многие тесты передаются только потому, что кто-то забыл настроить систему с этим флагом при запуске тестов JUnit - не очень хорошо.
В общем, из-за этого, я бы сказал, что с помощью JUnit assertTrue
является лучшей практикой, поскольку она гарантирует испытание проводится, обеспечивает согласованность (иногда использовать assertThat
или другой утверждает, что не ява ключевое слово) и если поведение утверждений JUnit должно измениться в будущем (например, подключиться к некоторому фильтру или другой будущей функции JUnit), ваш код сможет использовать это.
Настоящая цель ключевого слова assert в java заключается в том, чтобы отключить его без штрафа за выполнение. Это не относится к модульным тестам.
Я предпочитаю JUnit утверждения, поскольку они предлагают более богатый API, чем встроенный в assert
заявлении и, что более важно, не должны быть явно включены в отличие от assert
, что требует -ea
JVM аргумент.
'-ea' всегда включен в' mvn test', не нужно '-ea'. Более богатый апи, хороший улов. Иногда я думаю, что API неправильно используется в тесте, потому что он не является частью приложения (a в api), я предпочитаю называть его только более богатыми методами. –
Я бы сказал, что если вы используете JUnit, вы должны использовать утверждения JUnit. assertTrue()
в основном то же самое, что и assert
, иначе зачем использовать JUnit?
Вы должны использовать JUnit для тестовой рамки. Утверждения действительно являются небольшой частью значения, которое дает JUnit. JUnit без 'Assert' потребует больше шаблонов. 'assert' без JUnit потребует от вас написать целую структуру. – Yishai
Я больше говорил, если вы собираетесь использовать инструмент, ИСПОЛЬЗУЙТЕ ИНСТРУМЕНТ. регулярные старые утверждения утверждают кажутся глупыми в тестах JUnit. На мой взгляд, они принадлежат реальному коду. – CheesePls
@CheesePls «обычные старые утверждения» на самом деле более поздние, чем утверждает JUnit. – dolmen
Это может быть неприменимым, если вы используете исключительно блестящие и новые вещи, но утверждение не было введено в Java до 1.4SE. Поэтому, если вы должны работать в среде со старыми технологиями, вы можете склониться к JUnit по соображениям совместимости.
Когда тест не проходит, вы получаете больше информации.
assertEquals(1, 2);
приводит java.lang.AssertionError: expected:<1> but was:<2>
против
assert(1 == 2);
результатов в java.lang.AssertionError
вы можете получить еще больше информации, если вы добавляете сообщение аргумент assertEquals
try 'assert 1 == 2:" 1 не 2 ";'. –
@PeterRader Попробуйте использовать ключевое слово assert, когда -ea не включен. Или еще лучше, используйте утверждения JUnit, которые всегда работают. –
@ThomasW, когда -ea не позволяет его не тестировать. JUnit asserations не всегда работает, они работают только, если вы решили использовать JUnit, что такое фреймворк, а в случае maven - зависимость от maven - зависимость от maven, которая должна быть только в тестовой области. У нас есть две стороны: что вы предпочитаете? ** 1st Side **: используйте фреймворк в качестве зависимости только в тестовой области, который должен быть загружен, что eclipse позволяет использовать в классах, которые не находятся в папке src/main, но не компилируются там, потому что maven имеет junit только в области проверки или ** 2-й стороне **: используйте встроенный материал. –
Я бы сказал, что использование JUnit утверждает в тестовых случаях, и использовать java в коде. Другими словами, у реального кода никогда не должно быть зависимостей JUnit, как очевидно, и если это тест, он должен использовать вариации JUnit, никогда не утверждая.
Я думаю, что этот вопрос должен быть вновь открыт: верхний ответ чрезвычайно полезен. – jakebeal
Существуют абсолютно фактические различия между утверждениями JUnit и ключевым словом Java assert. Это вовсе не вопрос, основанный на мнениях. –