I had a JUnit test asserting two Double
objects with the following:
Assert.assertEquals(Double expected, Double result);
This was was fine then I decided to change it to use the primitive double instead which turned out to be deprecated unless you also provide a delta.
So what I am wondering is what is the difference between using the Double
object or the primitive type in this assertEquals()
? Why is using the objects without a delta ok but then using the primitives without a delta is deprecated? Is Java doing something in the background which already has a default delta value taken into account?
Thanks.
There is NO assert method in JUnit with the signature
assertEquals(Double expected, Double result);
There is one, however, generic for objects:
assertEquals(Object expected, Object result);
This calls the objects' equals
method and as you can expect, it is not recommended to use this for comparing Double
objects.
For doubles, as you observed, it is absolutely necessary to use a delta for comparison, to avoid issues with floating-point rounding (explained already in some other answers). If you use the 3-argument version of assertEquals
with double
arguments
assertEquals(double expected, double actual, double delta);
your Double
s will get silently unboxed to double
and everything will work fine (and your tests won't fail unexpectedly :-).