Java Junit4:ArrayList<Double> 的 assertEquals 具有单精度预期值

Java Junit4: assertEquals for ArrayList<Double> with single precision expected values

我正在为 Java 变量(即 ArrayList<Double>)编写 JUnit 测试。复杂的是我的期望值是单精度的,而 Java 的 Double 是双精度的。由于精度错误,因此 assertEquals(expected_array_list, actual_array_list) 不会通过。

我的解决方法是遍历所有元素和 assertEquals 每对双打,将 epsilon 值设置为适当的值。有没有一种方法可以为整个 ArrayList 设置 epsilon,而不必将其分解为其元素?

JUnit 4.6 及更高版本有一个方便的方法 assertArrayEquals(double[] expected, double[] actual, double delta) 方法(根据规范,String 消息有一个重载变体)。在 Java 8 中,您可以很容易地将那些 List 转换为原始数组并直接使用它:

double delta = 0.05; // or any other reasonable value
double[] expectedArray = 
    expectedList.stream().mapToDouble(Double::doubleValue).toArray();
double[] actualArray = 
    actualList.stream().mapToDouble(Double::doubleValue).toArray();
assertArrayEqulas(expectedArray, actualArray, delta);