2016-02-13 12 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

:任意の言語でdoubles may not be exactly equal(精度の問題)ので、

assertEquals(double expected, double actual, double epsilon)

を、イプシロンは、あなたは、彼らがする必要がどれだけ近いかを説明することができます。

イプシロンがexpected結果から最大偏差としてを定義されています

Math.abs(expected - actual) < epsilon 

だから本質的には、それはあなたが
Arithmetic.divide(12.0, 4.0) - 3.0 = 3.0 - 3.0 = 0によってexpected結果(あなたの例で3.0または3.3)から逸脱することを可能にし、
Arithmetic.divide(10.0, 3.0) - 3.3 ≈ 3.3333333 -3.3 ≈ 0.3333333である。

あなたが見るように、expectedactualの結果はまったく同じなので、実際にイプシロンは必要ありません。 actualの結果が約>であり、0.33333であることがわかるように、2番目のものでは少しずれが許容されるはずです。expectedよりです。よる

+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 デルタ用今、greater than 0.3である= 0.333..Arithmetic.divide(10.0,3.0) - 3.0のでassertEqual()今デルタ= 0.4 ため

に失敗し、Arithmetic.divide(10.0,3.0) - 3.0 = 0.333..LESSER than 0.4なので、assertEqual()が渡されます。

関連する問題