Junit 5 的 assertEquals 与 double 的精度

Precision of Junit 5's assertEquals with double

看起来在 junit 5 中完全双打不被认为是相等的 以下代码在 junit 5

中失败
public void testDouble() {        
    org.junit.jupiter.api.Assertions.assertEquals(87.91622222222225d, 87.91622222222225d, 0.0);
}

和junit 4一样,通过测试

public void testDouble() {
    org.junit.Assert.assertEquals(87.91622222222225d, 87.91622222222225d, 0.0);
}

对这种差异有很好的解释吗?

在评论中详细说明一个答案,给出的错误信息是:

org.opentest4j.AssertionFailedError: positive delta expected but was: <0.0>

此错误可能令人困惑。我最初将其解释为我的 delta 高于 0.0,并且当值相等时非零 delta 失败。 (这确实很奇怪)

错误消息实际上意味着提供的增量 (0.0) 是不受支持的错误值。它与提供的两个值无关,这两个值可能相等也可能不相等并且不进行比较。

解决方案要么使用没有 delta 参数的方法,要么提供一个非零的 delta,这对于 double 可能更安全。这些都应该有效:

org.junit.jupiter.api.Assertions.assertEquals(87.91622222222225d, 87.91622222222225d);
org.junit.jupiter.api.Assertions.assertEquals(87.91622222222225d, 87.91622222222225d, 0.00000000001d);