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