Lưu ý rằng nếu bạn không làm toán, không có gì sai khi khẳng định các giá trị dấu phẩy động chính xác. Ví dụ:
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
Trong trường hợp này, bạn muốn chắc chắn rằng nó thực sự MIN_VALUE
, không phải bằng không -MIN_VALUE
hoặc MIN_NORMAL
hoặc một số giá trị rất nhỏ khác. Bạn có thể nói
double defaultValue = new FooImpl().getDefaultValue();
assertEquals(Double.MIN_VALUE, defaultValue);
nhưng điều này sẽ giúp bạn có một cảnh báo không dùng nữa. Để tránh điều đó, bạn có thể gọi assertEquals(Object, Object)
thay thế:
// really you just need one cast because of autoboxing, but let's be clear
assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
Và, nếu bạn thực sự muốn trông thông minh:
assertEquals(
Double.doubleToLongBits(Double.MIN_VALUE),
Double.doubleToLongBits(defaultValue)
);
Hoặc bạn chỉ có thể sử dụng các xác nhận thông thạo kiểu Hamcrest:
// equivalent to assertEquals((Object)Double.MIN_VALUE, (Object)defaultValue);
assertThat(defaultValue, is(Double.MIN_VALUE));
Nếu giá trị mà bạn kiểm tra đang không xuất phát từ thực hiện một số toán học, tuy nhiên, sử dụng epsilon.