使用之间的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>