2016-02-13 63 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()通過