Есть ли способ в Hamcrest сравнить число в пределах диапазона? Я ищу что-то вроде этого:
assertThat(50L, is(between(12L, 1658L)));
Есть ли способ в Hamcrest сравнить число в пределах диапазона? Я ищу что-то вроде этого:
assertThat(50L, is(between(12L, 1658L)));
Альтернативой решению Jeff является использование both:
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
Я думаю, что это вполне читаемо. Вы также получите хорошее сообщение об ошибке, если проверка завершилась неудачно:
Ожидаемое: (значение больше, чем < 50L > и значение меньше, чем < 1658L > ) получил: < 50L >
Я не верю, что between является частью основных помощников hamcrest, но вы можете сделать что-то вроде этого:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
Это все еще немного уродливо, поэтому вы можете создать вспомогательный метод между
assertThat(number, between(min,max))
и between выглядит как
allOf(greaterThan(min),lessThan(max))
Тем не менее, это не фантастическое решение, но оно читается как совпадение hamcrest.
Если вы не можете найти общедоступный, было бы тривиально написать собственный between matcher 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>