Tenga en cuenta que si no está haciendo matemáticas, no hay nada de malo en afirmar valores exactos de coma flotante. Por ejemplo:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
En este caso, usted quiere asegurarse de que es realmente MIN_VALUE
, no es cero o -MIN_VALUE
o MIN_NORMAL
o algún otro valor muy pequeño. Puedes decir
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
pero esto te dará una advertencia de desaprobación. Para evitar eso, puede llamar en su assertEquals(Object, Object)
lugar:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
Y, si realmente quieres lucir inteligente:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
O simplemente puede usar las afirmaciones de estilo fluido de Hamcrest:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Si el valor que se está comprobando lo hace viene de hacer un poco de matemáticas, sin embargo, utilizar el épsilon.