我有一个关于JUnit assertEquals
来测试double
值的问题。阅读API文档我可以看到:
@废弃的公共静态无效assertEquals(双重预期,双实际) 不推荐。使用
assertEquals(double expected, double actual, double delta)
代替。
(注意:在较早的文档版本中,增量参数称为epsilon)
delta
(或epsilon
)参数是什么意思?
发布于 2011-04-16 13:20:08
Epsilon是这两个数字可以减去的值。所以只要是Math.abs(expected - actual) <= epsilon
,它就会断言为真
发布于 2011-12-05 12:33:20
这是什么版本的JUnit?我只看过三角洲,没见过埃西龙-但这是个附带的问题!
来自JUnit javadoc
达美-预期和实际之间的最大增量,对于这两个数字仍然被认为是相等的。
这可能是过分,但我通常使用一个非常小的数字,例如。
private static final double DELTA = 1e-15;
@Test
public void testDelta(){
assertEquals(123.456, 123.456, DELTA);
}
如果您使用的是汉克雷斯特断言,您只需使用标准的双倍equalTo()
(它不使用增量)。然而,如果您想要一个增量,您可以只使用closeTo()
(参见javadoc)。
private static final double DELTA = 1e-15;
@Test
public void testDelta(){
assertThat(123.456, equalTo(123.456));
assertThat(123.456, closeTo(123.456, DELTA));
}
FYI即将到来的JUnit 5也将在用两个双打调用assertEquals()
时使用使delta可选。实现 (如果您感兴趣的话)是:
private static boolean doublesAreEqual(double value1, double value2) {
return Double.doubleToLongBits(value1) == Double.doubleToLongBits(value2);
}
发布于 2011-04-16 13:29:26
浮点计算并不准确--经常会出现舍入误差,以及由于表示而产生的误差.(例如,0.1不能完全用二进制浮点数表示)。
正因为如此,直接比较两个浮点的相等值通常不是一个好主意,因为根据计算的方式,它们可以相差很小。
“增量”在JUnit javadocs中称为“增量”,它描述了您可以容忍的值中的差异,以便它们仍然被认为是相等的。这个值的大小完全取决于您正在比较的值。当比较双值时,我通常使用预期值除以10^6。
https://stackoverflow.com/questions/5686755
复制相似问题