โปรดทราบว่าหากคุณไม่ได้ทำคณิตศาสตร์ไม่มีอะไรผิดปกติกับการยืนยันค่าจุดลอยตัวที่แน่นอน ตัวอย่างเช่น
public interface Foo {
double getDefaultValue();
}
public class FooImpl implements Foo {
public double getDefaultValue() { return Double.MIN_VALUE; }
}
ในกรณีนี้คุณต้องการตรวจสอบให้แน่ใจว่าเป็นจริงMIN_VALUE
ไม่ใช่ศูนย์หรือ-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