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
There is one, however, generic for objects:
This calls the objects’
equalsmethod and as you can expect, it is not recommended to use this for comparingDoubleobjects.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
assertEqualswithdoubleargumentsyour
Doubles will get silently unboxed todoubleand everything will work fine (and your tests won’t fail unexpectedly :-).