Notez que si vous n'êtes pas à faire des mathématiques, il n'y a rien de mal à faire valoir exacte des valeurs à virgule flottante. Par exemple:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
Dans ce cas, vous voulez vous assurer qu'il est vraiment MIN_VALUE
, pas à zéro ou -MIN_VALUE
ou MIN_NORMAL
ou une autre valeur très faible. Vous pouvez dire
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
mais ainsi, vous obtenez une dépréciation d'avertissement. Pour éviter cela, vous pouvez appeler assertEquals(Object, Object)
à la place:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
Et, si vous voulez vraiment astucieux:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
Ou vous pouvez simplement utiliser Hamcrest couramment style assertions:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Si la valeur que vous êtes à la vérification de la ne viennent de faire quelques calculs, cependant, l'utilisation de l'epsilon.