Tenga en cuenta que si usted no está haciendo matemáticas, no hay nada malo con la afirmación exacta valores de punto flotante. Por ejemplo:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
En este caso, usted quiere asegurarse de que es realmente MIN_VALUE
, no cero o -MIN_VALUE
o MIN_NORMAL
o algún otro valor muy pequeño. Puede decir
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
pero esto le dará una advertencia de desaprobación. Para evitar esto, se puede llamar assertEquals(Object, Object)
lugar:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
Y, si realmente quiere mirar inteligente:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
O simplemente puede usar Hamcrest afirmaciones de estilo fluidez:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Si el valor que está comprobando hace proceden de algunos cálculos, utilice el épsilon.
Entonces, ¿qué valor debo aprobar como épsilon? – Emerald214
@ Emerald214 la cantidad de precisión. Si desea afirmar que un valor doble es 0D epsilon sería 0 (100% de precisión, sin excepciones). Si desea un margen de error (por ejemplo, para grados), puede establecer epsilon en 1, lo que significa que, por ejemplo, 64.2 ° es lo mismo que 64.8 ° (desde abs (64.8-64.2) <1) –