Есть ли способ в Hamcrest сравнить число в диапазоне чисел? Я ищу что-то вроде этого:
assertThat(50L, is(between(12L, 1658L)));
Есть ли способ в Hamcrest сравнить число в диапазоне чисел? Я ищу что-то вроде этого:
assertThat(50L, is(between(12L, 1658L)));
Альтернативой решению Джеффа является использование both
:
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
Я думаю, это вполне читабельно. Вы также получите хорошее сообщение об ошибке, если проверка не удалась:
Ожидаемый: is (значение больше ‹50L> и значение меньше ‹1658L>) получено: ‹50L>
Я не верю, что between
является частью основных средств сопоставления подколенного сухожилия, но вы можете сделать что-то вроде этого:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
Это все еще немного некрасиво, поэтому вы можете создать вспомогательный метод между
assertThat(number, between(min,max))
и between
выглядит так
allOf(greaterThan(min),lessThan(max))
Все еще не фантастическое решение, но оно читается как сопоставитель подколенного сухожилия.
Если вы не можете найти его в открытом доступе, было бы тривиально написать собственный between
сопоставитель http://code.google.com/p/hamcrest/wiki/Tutorial.
Если вы имеете дело с целыми числами, вам следует рассмотреть возможность использования метода closeTo
:
assertThat((double)nclient, is(closeTo(nserver, 1d)));
к сожалению, для целых чисел нет closeTo
, но каждое 32-битное целое число можно представить двойным числом, поэтому вы можете просто привести их к удвоению и продолжить.
Это не совсем эквивалентно between
, но иногда может быть полезно.
Другой вариант — использовать расширение Cirneco. У него есть between()
, betweenInclusive()
и многое другое. Эти сопоставители также применяются к другим объектам, реализующим Comparable
(например, Date
).
По вашему примеру будет:
assertThat(50L, between(12L, 1658L));
и если вы хотите, чтобы две границы были включены:
assertThat(50L, betweenIncluded(12L, 1658L));
или если вы хотите, чтобы была включена только одна из границ:
assertThat(50L, betweenLowerBoundIncluded(12L, 1658L));
assertThat(50L, betweenUpperBoundIncluded(12L, 1658L));
Вы можете использовать следующую зависимость для проекта, совместимого с JDK7:
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java7-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
или следующее, если вы используете JDK8
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java8-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>