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);
看起来在 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);