Nota che se non stai facendo matematica, non c'è niente di sbagliato nell'affermare valori esatti in virgola mobile. Per esempio:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
In questo caso, vuoi assicurarti che sia davvero MIN_VALUE
, non zero o -MIN_VALUE
o MIN_NORMAL
o qualche altro valore molto piccolo. Si può dire
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
ma questo ti darà un avviso di deprecazione. Per evitarlo, puoi chiamare assertEquals(Object, Object)
invece:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
E, se vuoi davvero sembrare intelligente:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
Oppure puoi semplicemente usare le affermazioni in stile fluente di Hamcrest:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Se il valore si sta controllando non vieni da fare un po 'di matematica, però, utilizzare l'Epsilon.