使用之间的Hamcrest号码比较
Hamcrest有没有办法在数字范围内比较一个数字? 我正在寻找这样的东西:
assertThat(50L, is(between(12L, 1658L)));  杰夫的解决scheme的另一种select是使用both : 
 assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L)))); 
我认为这是很可读的。 如果检查失败,您也会得到一个很好的错误信息:
预期:是(大于<50L>和小于<1658L>的值)得到:<50L>
我不相信这是核心Hamcrest匹配者的一部分,但你可以这样做:
 assertThat(number, allOf(greaterThan(min),lessThan(max))); 
这仍然有点难看,所以你可以创build一个辅助方法
 assertThat(number, between(min,max)) 
 和between样子 
 allOf(greaterThan(min),lessThan(max)) 
仍然不是一个梦幻般的解决scheme,但它看起来像一个hamcrest匹配器。
 如果您找不到公开发布的内容,则可以between匹配器http://code.google.com/p/hamcrest/wiki/Tutorial between自行编写代码。 
 如果你正在处理整数,你应该考虑使用closeTo方法: 
 assertThat((double)nclient, is(closeTo(nserver, 1d))); 
 不幸的是,整数没有closeTo ,但是每32位整数可以用一个double来表示,所以你可以简单地将它们转换为double,并继续。 
这不完全相同,但有时可以帮助。
 另一种select是使用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>