JUnit或Hamcrest是否有容差断言?

alg*_*mic 5 floating-point junit hamcrest

我想做一个断言,其中实际值在预期值的固定+/-值或预期值的百分比+/-值之内.

谷歌搜索时我注意到NUnit有一个很好的语法:

Assert.That( 5.5, Is.EqualTo( 5 ).Within(0.075);
Assert.That( 5.5, Is.EqualTo( 5 ).Within(1.5).Percent;
Run Code Online (Sandbox Code Playgroud)

JUnit或Hamcrest有类似我可以使用的东西吗?如果没有,是否有一种表达这种行为的好方法?

Mur*_*nik 5

简短的回答 - 是的.

老式org.junit.Assert有一个方法assertEquals(java.lang.String message, float expected, float actual, float delta),和一堆类似的双打方法,重载变量与消息,以及类似的实现assertArrayEquals.

如果你想使用Hamcrest,closeTo匹配器就是你想要的.

编辑:
为了解决有关百分比的评论中的问题 - 没有一个开箱即用的匹配器,但你可以通过将两者分开来确保它们在所需的比例和它之间.逆.以OP为例:

float expected = 5.0;
float actual = 5.5
float ratio = 1.0075;
float inverse = 1/ratio;

float div = actual/expected;

assertThat(div, allOf(greaterThan(inverse), lessThan(ratio)));
Run Code Online (Sandbox Code Playgroud)

它有点(好吧,很多)笨重,但它应该做的伎俩.