Observe que, se você não estiver fazendo matemática, não há nada errado em afirmar valores exatos de ponto flutuante. Por exemplo:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
Nesse caso, você quer ter certeza de que não é realmente MIN_VALUE
zero -MIN_VALUE
ou MIN_NORMAL
ou algum outro valor muito pequeno. Você pode dizer
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
mas isso receberá um aviso de descontinuação. Para evitar isso, você pode ligar assertEquals(Object, Object)
:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
E, se você realmente quer parecer inteligente:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
Ou você pode simplesmente usar afirmações no estilo fluente de Hamcrest:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Se o valor que você está verificando for proveniente de algumas contas, use o epsilon.