[英]assertEquals Precision
我对assertEquals
的delta / precision感到困惑。 据我所知, 0.034
将为我的分区代码提供精确度,如下所示:
public void testDivide() {
assertEquals(3.0, Arithmetic.divide(12.0, 4.0), 0.0);
assertEquals(3.3, Arithmetic.divide(10.0, 3.0), 0.034);
//fail("Not yet implemented");
}
但是,我试图将其更改为0.03
,测试失败。 另一方面,当我将其更改为0.04
,它成功,或者即使我将其更改为0.034444
等等,它也会成功。 我可以知道数字是什么意思,我们如何使用它?
您正在使用:
assertEquals
(double expected, double actual, double epsilon)
由于双语在任何语言中可能不完全相同 (精度问题),因此epsilon允许您描述它们的接近程度。
Epsilon 定义为与expected
结果的最大偏差:
Math.abs(expected - actual) < epsilon
所以从本质上讲,它允许你偏离expected
结果(在你的情况下为3.0
或3.3
)
Arithmetic.divide(12.0, 4.0) - 3.0 = 3.0 - 3.0 = 0
和
Arithmetic.divide(10.0, 3.0) - 3.3 ≈ 3.3333333 -3.3 ≈ 0.3333333
。
因此,在您看到的第一个中,实际上不需要epsilon,因为expected
和actual
结果完全相同。 在第二个你应该允许一些偏差,你看到actual
结果是大约>
由0.33333
比expected
一个。
根据: http : //junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals (double,double,double)
**delta** - the maximum delta between expected and actual for which both numbers are still considered equal.
for delta = 0.3现在, Arithmetic.divide(10.0,3.0) - 3.0
= 0.333..
它greater than 0.3
,所以assertEqual()
失败
for delta = 0.4现在, Arithmetic.divide(10.0,3.0) - 3.0
= 0.333..
LESSER than 0.4
,所以assertEqual()
通过
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.