在Hamcrest中有没有办法比较一个数字范围内的数字?我正在寻找这样的东西:
assertThat(50L, is(between(12L, 1658L)));
Run Code Online (Sandbox Code Playgroud)
Chr*_*ter 80
Jeff的解决方案的替代方案是使用both
:
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
Run Code Online (Sandbox Code Playgroud)
我觉得这很可读.如果检查失败,您还会收到一条错误消息:
预期:是(值大于<50L>且值小于<1658L>)得到:<50L>
Jef*_*rey 24
我不相信between
是核心hamcrest匹配器的一部分,但你可以做这样的事情:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
Run Code Online (Sandbox Code Playgroud)
这仍然有点难看,所以你可以创建一个辅助方法
assertThat(number, between(min,max))
Run Code Online (Sandbox Code Playgroud)
和between
看起来像
allOf(greaterThan(min),lessThan(max))
Run Code Online (Sandbox Code Playgroud)
仍然不是一个梦幻般的解决方案,但它读起来像一个hamcrest匹配器.
如果您找不到可公开获得的,那么编写自己的between
匹配器http://code.google.com/p/hamcrest/wiki/Tutorial将是微不足道的.
Ela*_*ich 16
如果您正在处理整数,则应考虑使用以下closeTo
方法:
assertThat((double)nclient, is(closeTo(nserver, 1d)));
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有closeTo
整数,但每个32位整数可以用双精度表示,所以你可以简单地将它们转换成双精度数,然后继续.
这不完全相同between
,但有时可能会有所帮助.