当前位置: 首页 > 面试题库 >

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

陶乐生
2023-03-14
问题内容

我想比较两个双打数组。使用香草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做到这一点,最好不要创建自定义Matchers(如果可能)。类似于对数组中的每个元素使用“关闭”匹配器。


问题答案:

如果更改a为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);
}

您也可以使用原始数组来完成此操作,但是您将需要一个自定义匹配器。



 类似资料: