2016-02-13 55 views
7

我对assertEquals中的增量/精度感到困惑。 我明白0.034会给我精度为我的部门代码,如下图所示:assertEquals Precision

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等等,它也会成功。 我可以知道这个数字是什么意思,我们如何使用它?

回答

7

您正在使用:

assertEquals(double expected, double actual, double epsilon)

因为在任何语言(精度问题)doubles may not be exactly equal,ε允许您描述他们如何接近定。

的Epsilon是定义从expected结果的最大偏差

Math.abs(expected - actual) < epsilon 

因此,在本质上它可以让你从expected结果(在你的情况下3.03.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

因此,在第一个中,您看到实际上不需要小数点,因为expectedactual的结果完全相同。 在第二个你应该允许一些偏差,因为你看到actual结果大约是>0.33333expected之一。

+0

是不是意味着精度? – stack

+0

这正是我写的:)它是在你的特定'assert'中允许的精度 – Idos

2

据:http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double,双,双)

**delta** - the maximum delta between expected and actual for which both numbers are still considered equal. 

为,δ=现在0.3 ,Arithmetic.divide(10.0,3.0) - 3.0 = 0.333..这是greater than 0.3,所以assertEqual()失败

为增量= 0.4 现在,Arithmetic.divide(10.0,3.0) - 3.0 = 0.333..这是LESSER than 0.4,所以assertEqual()通过