Когда я смотрю на примеры в классе Assert JavaDoc
assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Я не вижу большого преимущества перед, скажем так assertEquals( 0, 1 )
.
Это может быть хорошо для сообщений, если конструкции становятся более сложными, но вы видите больше преимуществ? Читаемость?
assertTrue
с&&
. Разделение его на два условия делает проблему очевидной даже в JUnit. Не пойми меня неправильно; Я согласен с вами, мне просто не нравится ваш пример.В примечаниях к выпуску JUnit для версии 4.4 (где она была представлена) указываются четыре преимущества:
Более подробная аргументация от парня, который создал новый синтаксис: здесь .
источник
В основном для повышения читабельности кода .
Помимо подколенного сухожилия вы также можете использовать утверждения фестиваля . У них есть несколько преимуществ перед подголовником, таких как:
(
assertEquals(123, actual); // reads "assert equals 123 is actual"
противassertThat(actual).isEqualTo(123); // reads "assert that actual is equal to 123")
Некоторые примеры
17 октября 2016 г. Обновление
Fest больше не активен, вместо этого используйте AssertJ .
источник
Основное обоснование заключается в том, что новый синтаксис сложно испортить.
Предположим, что определенное значение, foo, должно быть 1 после теста.
--ИЛИ--
При первом подходе очень легко забыть правильный порядок и набрать его задом наперед. Тогда вместо того, чтобы сказать, что тест не пройден, потому что он ожидал 1 и получил 2, сообщение возвращается. Не проблема при прохождении теста, но может привести к путанице, если тест не пройден.
Со второй версией практически невозможно совершить эту ошибку.
источник
Пример:
Кстати: вы можете написать текст в assertXXX тоже ...
источник
assertThat
случае, потому что сообщение, которое вы получаете автоматически, столь же информативно: «Ожидаемое: (значение больше <1> и значение меньше <3>)»Близок к естественному языку.
Легче читать, легче анализировать код. Программист тратит больше времени на анализ кода, чем на написание нового. Поэтому, если код будет легко анализировать, разработчик должен быть более продуктивным.
PS Код должен быть как хорошо написанная книга. Самодокументированный код.
источник
assertThat имеет преимущества перед assertEquals -
1) более читабельный
2) больше информации о сбое
3) ошибки времени компиляции, а не ошибки времени выполнения
4) гибкость при написании условий теста
5) переносимость - если вы используете hamcrest - вы можете использовать jUnit или TestNG в качестве базовой структуры.
источник