使用之间的Hamcrest数比较

saw*_*303 51 java hamcrest

在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>

  • @CiganoMorrisonMendez它位于org.hamcrest.CoreMatchers (3认同)

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,但有时可能会有所帮助.