不明确的方法调用断言中的断言等式(对象,对象)和断言匹配中的断言等式(双精度,双精度):

2022-08-31 20:18:28

我收到以下错误:

Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match

对于我的测试中的这行代码,请注意 () 返回一个 :JunitgetScoredouble

assertEquals(2.5, person.getScore());

这是我的断言导入:

import static org.junit.Assert.*;

导致此问题的原因是什么,我该如何解决此问题?


答案 1

您的 getScore() 返回 ,而不是 。因此,编译器感到困惑:它应该将两个参数都转换为Object,还是应该只将Double转换为double?Doubledouble

    double a = 2.0;
    Double b = 2.0;
    // assertEquals(a,b); // fails to compile
    // the compiler is confused whether to use
    assertEquals((Object) a,(Object) b); // OK
    // or
    assertEquals(a,(double) b); // OK

无论如何,我会将方法设置为返回基元类型双精度。


答案 2

如果您特别有兴趣使用(原始版本),请尝试调用允许偏差的重写方法,并将允许的偏差设置为零,如下所示:Assert.assertEquals(double, double)

assertEquals(2.5, person.getScore(), 0.0);

您可能还希望第三个参数是零以外的其他参数(如果允许与 略有不同)。例如,如果可接受,则您的测试变为person.getScore()2.52.500001

assertEquals(2.5, person.getScore(), 0.000001);