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