計算を行わない場合でも、正確な浮動小数点値をアサートすることに問題はありません。例えば:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
この場合、それがMIN_VALUE
ゼロではないか-MIN_VALUE
、MIN_NORMAL
またはその他の非常に小さい値ではないことを確認する必要があります。あなたは言うことができます
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
しかし、これにより非推奨の警告が表示されます。これを回避するには、assertEquals(Object, Object)
代わりに次を呼び出します。
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
そして、あなたが本当に賢く見たいなら:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
または、単にHamcrestの流暢なスタイルのアサーションを使用できます。
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
ただし、チェックしている値が何らかの計算から得られたものである場合は、イプシロンを使用します。