Подтвердить что ты не робот

Сравнение числа номеров

Есть ли способ в Hamcrest сравнить число в пределах диапазона? Я ищу что-то вроде этого:

assertThat(50L, is(between(12L, 1658L)));
4b9b3361

Ответ 1

Альтернативой решению Jeff является использование both:

assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));

Я думаю, что это вполне читаемо. Вы также получите хорошее сообщение об ошибке, если проверка завершилась неудачно:

Ожидаемое: (значение больше, чем < 50L > и значение меньше, чем < 1658L > ) получил: < 50L >

Ответ 2

Я не верю, что 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.

Ответ 3

Если вы имеете дело с целыми числами, вы должны использовать метод closeTo:

assertThat((double)nclient, is(closeTo(nserver, 1d)));

к сожалению, для целых чисел нет closeTo, но каждое 32-битное целое представимо двойным, поэтому вы можете просто отбросить их до удвоения и продолжить.

Это не совсем эквивалентно between, но иногда может быть полезным.

Ответ 4

Другой вариант - использовать расширение 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>