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);
我正在为 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);