que había una prueba JUnit valer dos objetos dobles con lo siguiente:diferencia Junit entre assertEquals (Doble, Doble) y assertEquals (doble, doble, delta)
Assert.assertEquals(Double expected, Double result);
Ésta era estaba bien entonces decidió cambiar usar el doble primitivo que resultó ser obsoleto a menos que también proporcione un delta.
así que lo que me pregunto es ¿cuál es la diferencia entre usar el objeto Doble o el tipo primitivo en este assertEquals? ¿Por qué está obsoleto el uso de objetos sin un delta ok pero luego el uso de las primitivas sin un delta? ¿Java está haciendo algo en segundo plano que ya tiene en cuenta un valor delta predeterminado?
Gracias.
+1 re unboxing, sí, con la advertencia de que tendrá un comportamiento ligeramente diferente si uno u otro Double es nulo. Con el Objeto, obtendrás un buen mensaje, con el delta, obtendrás una NullPointerException. –
Mi experiencia es que estos métodos no funcionan bien para números muy grandes en algunas circunstancias, particularmente si sus datos varían en órdenes de magnitud. Dos números pueden tener un porcentaje de error muy pequeño, pero requieren un delta aparentemente grande para coincidir. Pero ese mismo delta no funcionaría para valores mucho más pequeños en sus datos. En algunos casos, incluso se puede esperar que números muy grandes coincidan con casi todos los dígitos significativos. En otros casos, como cuando se comparan dos algoritmos de FFT optimizados, es mucho menos probable. Un método más robusto es restringir el error relativo. – orodbhen
@orodbhen Para que funcione, se debe calcular la delta basándose en el exponente del valor esperado, por lo que si 'double e' es el valor esperado, entonces delta debe ser' double d = Math.pow (10, Math.log10 (Math. abs (e)) - 12); 'donde' 12' es el número práctico máximo de dígitos significativos. Si multiplicas el log10 por el valor <1.0, entonces la prueba fallará para que 'e' tenga un exponente positivo grande y, por el contrario, si multiplicas log10 por valor> 1.0, fallará para que 'e' tenga un gran exponente negativo - y este es el efecto sobre el que estabas escribiendo. Por lo tanto, asegúrese de que el delta esté bien ajustado al exponente del valor esperado. – Cromax