请注意,如果您没有进行数学运算,那么断言确切的浮点值并没有错。 例如:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
在这种情况下,您要确保它真的是assertEquals(Object, Object),而不是零或-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。