Любой способ использовать Hamcrest matchers в производственном коде?

Я хотел бы использовать hamcrest как саковую фреймворк для использования в операторах if, а не в модульных тестах с утверждениями, а в необработанном коде.

Что-то вроде

if ( isNotEmpty(name) ) return //....

или

if ( isEqual(name, "John")) return //...

Точно так же, как AssertThat, но без ошибок бросания, просто возвращающ boolean. Является ли это возможным?

Ответ 1

Здесь bool project, который содержит следующий синтаксис:

if(the(name, is(equalTo("Alex")))) {
...
}

Ответ 2

Это просто Java, это зависит от вас, что вы решили сделать с ним. Домашняя страница Hamcrest говорит:

Предоставляет библиотеку объектов-совпадений (также называемых ограничениями или предикатами), позволяющих декларативно определять правила соответствия, которые будут использоваться в других рамках. Типичные сценарии включают в себя тестовые рамки, насмешливые библиотеки и правила проверки UI.

Примечание: Hamcrest это не тестовая библиотека: просто случается, что матчи очень полезны для тестирования.

Существует также страница на других фреймворках, в которой используется Hamcrest.

Ответ 3

Вы можете использовать метод 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, добавьте его в комментарий.:)

Ответ 4

В ответ на ответ Дэвида мы сейчас делаем именно это, и наш вспомогательный метод называется "the()". Это приводит к следующему коду:

if(the(name, is(equalTo("John")))) {...}

который получает немного lisp -y в конце, но делает его очень читаемым даже для клиентов.