Любой способ использовать совпадения Hamcrest в производственном коде? - PullRequest
12 голосов
/ 01 декабря 2011

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

Что-то вроде

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

или

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

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

Ответы [ 4 ]

6 голосов
/ 01 декабря 2011

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

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

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

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

5 голосов
/ 15 декабря 2012

Это bool проект , который обеспечивает следующий синтаксис:

if(the(name, is(equalTo("Alex")))) {
...
}
5 голосов
/ 05 января 2012

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

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

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

5 голосов
/ 02 декабря 2011

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

...