Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java单元测试中,如何断言数字在给定范围内?_Java_Junit - Fatal编程技术网

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

在Java单元测试中,如何断言数字在给定范围内?,java,junit,Java,Junit,从Python到Java。我知道这是非常基本的,但这里似乎还没有人问过这个问题,谷歌对我很害羞 在Python中,我只需执行以下操作,但Java对象: assertTrue(min <= mynum and mynum <= max); assertTrue(minassertTrue(min使用&&而不是和;除此之外,你写的东西应该有用。我要写: assertTrue("mynum is out of range: " + mynum, min <= mynum &

从Python到Java。我知道这是非常基本的,但这里似乎还没有人问过这个问题,谷歌对我很害羞

在Python中,我只需执行以下操作,但Java对象:

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

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

我要写:

assertTrue("mynum is out of range: " + mynum, min <= mynum && mynum <= max);
assertTrue(“mynum超出范围:”+mynum,min您也可以使用库,这更具可读性

assertThat(mynum,greaterThanOrEqualTo(min));

assertThat(mynum,lessThanOrEqualTo(max));
我不知道这两行是否可以合并。

扩展回答:您可以将这两行与
allOf
合并

assertThat(mynum, allOf(greaterThanOrEqualTo(min),lessThanOrEqualTo(max)));
如果您使用Hamcrest中的或等效项,则它的可读性会更高:

assertThat(mynum, allOf(greaterThanOrEqualTo(min),lessThanOrEqualTo(max)));
assertThat(mynum).isGreaterThanOrEqualTo(min).isLessThanOrEqualTo(max);
另外,
AssertionError
优于
assertTrue
版本,因为您不需要提供描述,例如:

java.lang.AssertionError: 
Expecting:
 <10>
to be less than or equal to:
 <42> 
java.lang.AssertionError:
期望:
小于或等于:
如果您使用的是Java 8和AssertJ 3.0.0,则可以使用lambda来指定它:

assertThat(mynum).matches(actual -> actual >= min && actual <= max);
assertThat(mynum).matches(实际值->实际值>=min&&actual我将使用Jonathan所说的,但使用更简单的断言:)


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

使用AssertJ
isCloseTo(预期,偏移量)

BigDecimal maxNegativeOffset=新的BigDecimal(“0.0004”);
BigDecimal实际值=新的BigDecimal(“0.0005”);
BigDecimal maxPositiveOffset=新的BigDecimal(“0.0006”);
偏移量=偏移量。偏移量(新的BigDecimal(“0.0001”);
Assertions.assertThat(实际)
.isCloseTo(最大负偏移量,偏移量)
.isCloseTo(最大正偏移量,偏移量);

Maven dependency:

因为
不是Java关键字。您需要
&
。啊,是的。
导入static org.junit.Assert.assertTrue
也很有帮助。谢谢大家!这个错误怎么更可读?10小于或等于42,这只是让人困惑。我认为断言比
assertTr读起来更自然ue
和Hamcrest版本。
 assertThat(mynum).isBetween(min, max);
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);