Зауважте, що якщо ви не займаєтеся математикою, немає нічого поганого в утвердженні точних значень з плаваючою комою. Наприклад:
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));
Якщо значення, яке ви перевіряєте , походить від математики, використовуйте епсилон.