JUnit测试:如何正确设置assertEquals()动态增量?

4dc9hkyq  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(130)

对于一个赋值,我必须实现我自己的浮点数。它们对我能想到的许多可能的输入组合都有效,所以我开始用随机值做一个JUnit测试。现在我遇到了一些麻烦,在方法调用assertEquals(String message,Double expected,Double actual,Double delta)中动态设置delta值。
这是我的试验方法:

@Test
public void testRandomMath() {

    DoubleStream doubleStream = ThreadLocalRandom.current().doubles(100);

    //limiting the doubles to be withing a workable range for my ownFloat class
    double[] doubles = doubleStream.map(d -> {
        if (ThreadLocalRandom.current().nextBoolean()) {
            return d * -1d;
        }
        else {
            return d;
        }
    }).map(d -> d * Math.pow(2, ThreadLocalRandom.current().nextInt(-8, 9))).toArray();

    OwnFloat[] ownFloats = new OwnFloat[doubles.length];

    for (int i = 0; i < doubles.length; i++) {
        ownFloats[i] = new OwnFloat(doubles[i]);
    }

    for (int i = 0; i < doubles.length; i++) {
        for (int j = 0; j < doubles.length; j++) {
            assertEquals("Failed " + doubles[i] + " + " + doubles[j],doubles[i] + doubles[j], ownFloats[i].add(ownFloats[j]).toDouble(), Math.min(doubles[i], doubles[j]));
            assertEquals("Failed " + doubles[i] + " - " + doubles[j], doubles[i] - doubles[j], ownFloats[i].sub(ownFloats[j]).toDouble(), Math.min(doubles[i], doubles[j]));
        }
    }
}

这是测试错误:

java.lang.AssertionError: Failed -0.01393084463838419 + -0.01393084463838419 
Expected :-0.02786168927676838
Actual   :-0.027861595153808594

关于delta的工作原理,我错在哪里了?我能用什么来代替输入的最小值作为delta值呢?
此致,兰塔纳

xtupzzrd

xtupzzrd1#

经过一些测试,我发现delta必须是一个正值。

Math.max(Math.abs(doubles[i]), Math.abs(doubles[j])) / 100

作为增量。

qco9c6ql

qco9c6ql2#

您应该根据您的用例直接设置delta
在您的情况下,delta = 1e-6应该足够了。

相关问题