Java Junit4:assertEquals for ArrayList<Double> with Single Precision 期望值



我正在为ArrayList<Double>的Java变量编写一个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);

最新更新