2

我正在尝试创建一个断言等于 (double, double, epsilon) 方法。我创建了它,由于某种原因,当我运行我的测试器时,该方法失败了。

public static void assertEquals(double expect, double actual, double epsilon){
    totalAssertMethods ++;
    double difference = (Math.abs(expect - actual));
    if (difference <= epsilon){

    } else {
        totalAssertMethodsFailures ++;
        Throwable throwable = new Throwable("Error: Expected X +/-E, found Y");
        throwable.printStackTrace();
    }
}

我认为问题在于,测试中期望和实际之间的差异仅与 epsilon 相差约 0.000001。有谁知道如何解决这个问题?

4

2 回答 2

1

尝试将您的值四舍五入到一定的精度:

double difference = Math.round(Math.abs(expect - actual) * 100000D) / 100000D;

对 epsilon 也做同样的事情。

double finalEpsilon = Math.round(epsilon * 100000D) / 100000D;
于 2016-01-29T07:42:18.183 回答
0

有点晚了,但可能对其他人有用:您AbstractDoubleAssert现在可以使用 assertj :

assertThat(actual).isCloseTo(expected, Percentage.withPercentage(0.999999));
于 2018-05-09T13:30:35.183 回答