java - Junit 5 的 assertEquals 与 double 的精度

标签 java junit junit4 junit5

看起来在 junit 5 中完全 double 不被认为是相等的 以下代码在 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);

关于java - Junit 5 的 assertEquals 与 double 的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53458934/

相关文章:

java - 如何处理外部类型?

java - 将 Spring IoC 与 web.xml 中定义的 servlet 结合使用

java - Powermock 不断为 ScriptEngineManager 抛出错误

java - 如何以编程方式忽略多个失败的junit测试?

junit4 - Java Batch 的 JUnit 测试用例

java - 在 Java 8 中收集流的元素并将其中一些元素减少为结果集合中的单个元素

Java 从 UserList 和 setItems ComboBox 获取用户名

java - 为此方法编写单元测试用例返回 RxJava Future

android - 如何使用 Kotlin 协程为 Android 单元测试注入(inject) viewModelScope?

java - 如何在 JUnit 中测试 void 方法