这是哪个版本的JUnit?我只见过delta,而不是epsilon - 但这是一个小问题!
来自 JUnit javadoc:
delta - 预期和实际之间的最大增量,两个数字仍然被视为相等。
这可能有点过分,但我通常使用一个非常小的数字,例如
private static final double DELTA = 1e-15;
@Test
public void testDelta(){
assertEquals(123.456, 123.456, DELTA);
}
如果您使用的是 hamcrest 断言,则可以只使用带有两个双精度的标准(它不使用 delta)。但是,如果你想要一个delta,你可以只使用(参见javadoc),例如equalTo()
closeTo()
private static final double DELTA = 1e-15;
@Test
public void testDelta(){
assertThat(123.456, equalTo(123.456));
assertThat(123.456, closeTo(123.456, DELTA));
}
仅供参考,即将推出的JUnit 5也将在使用两个双打时使delta可选。实现(如果你感兴趣的话)是:assertEquals()
private static boolean doublesAreEqual(double value1, double value2) {
return Double.doubleToLongBits(value1) == Double.doubleToLongBits(value2);
}