2016-02-13 10 views
7

assertEquals'daki delta/duyarlık konusunda kafam karıştı. Ben aşağıda gösterildiği gibi 0.034, benim bölümün kodu için bana hassas verecek anlıyoruz: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"); 
    } 

Ancak, ben 0.03 için değiştirmeye çalıştım, deney başarısız oldu. Diğer yandan, 0.04 olarak değiştirdiğimde, başarılı oldu, ya da ben 0.034444 ve benzeri için değiştirirseniz bile, başarılı olacaktır. Numaranın ne anlama geldiğini öğrenebilir miyim ve nasıl kullanırız?

cevap

7
kullanıyorsunuz

:

assertEquals(double expected, double actual, double epsilon)

herhangi bir dilde (hassas sorunları) içinde doubles may not be exactly equal yana, epsilon onlar olmak zorunda ne kadar yakın açıklamak için izin verir.

Math.abs(expected - actual) < epsilon 

Yani özünde bunu
Arithmetic.divide(12.0, 4.0) - 3.0 = 3.0 - 3.0 = 0 tarafından expected sonucun (sizin durumlarda 3.0 veya 3.3) sapma sağlar:

Epsilon expected sonucundan maksimal sapma olarak tanımlanan olduğunu Sırasıyla
Arithmetic.divide(10.0, 3.0) - 3.3 ≈ 3.3333333 -3.3 ≈ 0.3333333.

Gördüğünüz gibi, ilk olarak, expected ve actual sonuçlarının tam olarak aynı olması nedeniyle bir epsilon'a gerek yoktur. İkincisi, actual sonucunun tarafından 0.33333 tarafından expected bire göre görüldüğünden bazı sapmalara izin vermeniz gerekir. göre

+0

epsilon, doğruluk demek değil mi? – stack

+0

Tam olarak yazdığım şey buydu :) Bu sizin belirli 'assert 'inizde izin verilen hassaslıktır. – Idos

2

: http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double), çift, çift delta için

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

= 0,3 Şimdi, greater than 0.3 olan Arithmetic.divide(10.0,3.0) - 3.0 = 0.333.., yani assertEqual() delta için

başarısız = 0.4 Şimdi, Arithmetic.divide(10.0,3.0) - 3.0 = 0.333.. LESSER than 0.4, yani assertEqual() geçer

İlgili konular