Ответ 1
Здесь bool project, который содержит следующий синтаксис:
if(the(name, is(equalTo("Alex")))) {
...
}
Я хотел бы использовать hamcrest как саковую фреймворк для использования в операторах if
, а не в модульных тестах с утверждениями, а в необработанном коде.
Что-то вроде
if ( isNotEmpty(name) ) return //....
или
if ( isEqual(name, "John")) return //...
Точно так же, как AssertThat
, но без ошибок бросания, просто возвращающ boolean.
Является ли это возможным?
Здесь bool project, который содержит следующий синтаксис:
if(the(name, is(equalTo("Alex")))) {
...
}
Это просто Java, это зависит от вас, что вы решили сделать с ним. Домашняя страница Hamcrest говорит:
Предоставляет библиотеку объектов-совпадений (также называемых ограничениями или предикатами), позволяющих декларативно определять правила соответствия, которые будут использоваться в других рамках. Типичные сценарии включают в себя тестовые рамки, насмешливые библиотеки и правила проверки UI.
Примечание: Hamcrest это не тестовая библиотека: просто случается, что матчи очень полезны для тестирования.
Существует также страница на других фреймворках, в которой используется Hamcrest.
Вы можете использовать метод matches(value)
для любого экземпляра Matcher
.
if (equalTo("John").matches(name)) { ... }
Чтобы улучшить читаемость, создайте свой собственный вспомогательный метод, аналогичный assertThat
.
public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
return matcher.matches(actual);
}
...
if (checkThat(name, equalTo("John"))) { ... }
Если вы придумали лучшее имя, чем checkThat
, например ifTrueThat
, добавьте его в комментарий.:)
В ответ на ответ Дэвида мы сейчас делаем именно это, и наш вспомогательный метод называется "the()". Это приводит к следующему коду:
if(the(name, is(equalTo("John")))) {...}
который получает немного lisp -y в конце, но делает его очень читаемым даже для клиентов.