2016-02-13 13 views
7

Ich bin verwirrt in Bezug auf die Delta/Präzision in assertEquals. Ich verstehe, dass 0.034 gibt mir die Präzision für meinen Abteilungscode, wie unten dargestellt:assertEquals Präzision

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"); 
    } 

Allerdings habe ich versucht, es zu 0.03 zu ändern, scheiterte der Test. Auf der anderen Seite, wenn ich es zu 0.04 ändere, ist es gelungen, oder selbst wenn ich es zu 0.034444 und so weiter ändern, wird es erfolgreich sein. Darf ich wissen, was die Nummer bedeutet, und wie verwenden wir sie?

Antwort

7

Sie verwenden:

assertEquals(double expected, double actual, double epsilon)

Seit doubles may not be exactly equal in jeder Sprache (Präzisionsfragen), epsilon ermöglicht es Ihnen, wie nah sie sein müssen, um beschreiben.

Epsilon ist als die maximale Abweichung von der expected Ergebnis definiert:

Math.abs(expected - actual) < epsilon 

Also im Grunde es Sie aus dem expected Ergebnis (3.0 oder 3.3 in Ihre Fälle) von
Arithmetic.divide(12.0, 4.0) - 3.0 = 3.0 - 3.0 = 0 abweichen können und
Arithmetic.divide(10.0, 3.0) - 3.3 ≈ 3.3333333 -3.3 ≈ 0.3333333 jeweils.

Also in der ersten, wie Sie sehen, gibt es eigentlich keine Notwendigkeit für ein Epsilon, da die expected und actual Ergebnisse genau gleich sind. In der zweiten sollten Sie eine Abweichung erlauben, wie Sie sehen, dass das actual Ergebnis ist > von 0.33333 als die expected eins.

+0

ist nicht epsilon die präzision? – stack

+0

Das ist genau das, was ich geschrieben habe :) Es ist die Präzision erlaubt in Ihrem spezifischen 'behaupten' – Idos

2

Nach: 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. 

für delta = 0,3 nun Arithmetic.divide(10.0,3.0) - 3.0 = 0.333.. die greater than 0.3 ist, so assertEqual() ausfällt

für delta = 0,4 nun Arithmetic.divide(10.0,3.0) - 3.0 = 0.333.. das ist LESSER than 0.4, also assertEqual() übergibt