Saltar al contenido

Diferencia de Junit entre assertEquals (Doble, Doble) y assertEquals (doble, doble, delta)

Nuestros programadores estrellas agotaron sus depósitos de café, en su búsqueda noche y día por la respuesta, hasta que Max halló el arreglo en GitHub por lo tanto en este momento la comparte aquí.

Solución:

NO hay método de afirmación en JUnit con la firma

assertEquals(Double expected, Double result);

Hay uno, sin embargo, genérico para objetos:

assertEquals(Object expected, Object result);

Esto llama a los objetos equals método y, como es de esperar, no se recomienda utilizarlo para comparar Double objetos.

Para los dobles, como observó, es absolutamente necesario usar un delta para comparar, para evitar problemas con el redondeo de punto flotante (ya se explicó en algunas otras respuestas). Si usa la versión de 3 argumentos de assertEquals con double argumentos

assertEquals(double expected, double actual, double delta);

tu Doubles se desempaquetará silenciosamente para double y todo funcionará bien (y sus pruebas no fallarán inesperadamente :-).

Las matemáticas dobles rara vez dan exactamente resultados iguales. Por ejemplo, 0.1 * 0.1 != 0.01. Por lo general, necesita al menos algo delta para comparar resultados de doble precisión.

Por otro lado, si está comparando en caja Doubles, se supone que desea la igualdad exacta. Java no tiene en cuenta un valor delta predeterminado, pero Double.equals tiene un comportamiento ligeramente diferente de ==: en particular, su manejo de NaNs.

Esto tiene sentido en las pruebas, porque Double.NaN != Double.NaNpero en una prueba, si esperabas un NaN y NaN fue devuelto, esa es una respuesta correcta.

Mejor escribe algo como esto:

assertEquals(23.0, 250.0, 0.0)  

0.0 – es delta. Lea por qué sus métodos están en desuso.

Calificaciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *