在Java单元测试中,如何断言一个数字在给定范围内?

时间:2012-03-15 01:03:18

标签: java junit

从Python进入Java。我知道这是非常基本的,但似乎还没有在这里提出这个问题,谷歌对我很腼腆。

在Python中,我只是做了类似这样的事情,但Java对象:

assertTrue(min <= mynum and mynum <= max);

8 个答案:

答案 0 :(得分:17)

我写道:

assertTrue("mynum is out of range: " + mynum, min <= mynum && mynum <= max);

但从技术上讲,你只需要:

assertTrue(min <= mynum && mynum <= max);

无论哪种方式,请务必写下&&而不是and

答案 1 :(得分:10)

我会像Jonathan所说的那样使用AssertJ,但是使用更简单的断言:)

 assertThat(mynum).isBetween(min, max);

我认为这是最酷的解决方案:)

答案 2 :(得分:5)

您也可以使用Hamcrest库,这样更具可读性。

assertThat(mynum,greaterThanOrEqualTo(min));

assertThat(mynum,lessThanOrEqualTo(max));

我不知道这两行是否可以合并。

答案 3 :(得分:2)

this答案延伸:您可以将两者合并为allOf

assertThat(mynum, allOf(greaterThanOrEqualTo(min),lessThanOrEqualTo(max)));

Hamcrest中的OR等价物为anyOf

答案 4 :(得分:1)

assertTrue(min <= mynum && mynum <= max, "not in range");

最后的评论是可选的。基本上与python版本相同,除了&&

答案 5 :(得分:1)

使用&&而不是and;除此之外,你写的东西应该有效。

答案 6 :(得分:1)

如果您使用AssertJ,则甚至更具可读性:

assertThat(mynum).isGreaterThanOrEqualTo(min).isLessThanOrEqualTo(max);

另外,AssertionError打败了assertTrue版本,因为您不需要提供说明,例如:

java.lang.AssertionError: 
Expecting:
 <10>
to be less than or equal to:
 <42> 

如果您使用的是Java 8和AssertJ 3.0.0,则可以使用lambda来指定它:

assertThat(mynum).matches(actual -> actual >= min && actual <= max);

答案 7 :(得分:0)

AssertJ isCloseTo(expected, offset)一起使用:

BigDecimal maxNegativeOffset = new BigDecimal("0.0004");
BigDecimal actual = new BigDecimal("0.0005");
BigDecimal maxPositiveOffset = new BigDecimal("0.0006");

Offset<BigDecimal> offset = Offset.offset(new BigDecimal("0.0001"));

Assertions.assertThat(actual)
  .isCloseTo(maxNegativeOffset, offset)
  .isCloseTo(maxPositiveOffset, offset);

Maven依赖项:https://mvnrepository.com/artifact/org.assertj/assertj-core