java中equals的参数,java - 对于double值,assertEquals的epsilon参数的含义

请注意,如果您没有进行数学运算,那么断言确切的浮点值并没有错。 例如:

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。