问题 如何使用Hamcrest检查双精度数组中的每个元素是否“接近”另一个数组中的每个元素?


我想比较两个双打阵列。使用vanilla JUnit,我可以这样做:

double[] a = new double[]{1.0, 2.0, 3.0};
double[] b = new double[]{1.0, 2.0, 3.0};
assertEquals(a, b, 1e-10);

我想知道如何使用Hamcrest,最好不要创建自定义匹配器(如果可能)。类似于为数组中的每个元素使用“close”匹配器的东西。


12313
2018-05-16 17:18


起源



答案:


如果你改变了 a 到了 Double[] 那么你可以做到 assertThat(a, arrayCloseTo(b, .2)); 使用这个帮助方法:

public static Matcher<Double[]> arrayCloseTo(double[] array, double error) {
    List<Matcher<? super Double>> matchers = new ArrayList<Matcher<? super Double>>();
    for (double d : array)
        matchers.add(closeTo(d, error));
    return arrayContaining(matchers);
}

你也可以使用原始数组,但是你需要一个自定义匹配器。


10
2018-05-16 18:28