Pamiętaj, że jeśli nie robisz matematyki, nie ma nic złego w zapewnianiu dokładnych wartości zmiennoprzecinkowych. Na przykład:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
W tym przypadku, chcesz się upewnić, że to naprawdę MIN_VALUE
nie zero lub -MIN_VALUE
lub MIN_NORMAL
lub jakiś inny bardzo małą wartość. Możesz powiedzieć
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
ale dostaniesz ostrzeżenie o rezygnacji. Aby tego uniknąć, możesz assertEquals(Object, Object)
zamiast tego zadzwonić :
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
A jeśli naprawdę chcesz wyglądać sprytnie:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
Lub możesz po prostu użyć płynnych twierdzeń Hamcrest:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Jeśli wartość jesteś sprawdzanie ma pochodzić z jakiejś matematyki, choć użyć epsilon.