模糊方法调用Assert中的assertEquals(Object,Object)和Assert匹配中的assertEquals(double,double):

jav*_*999 22 java double junit assert object

我收到以下错误:

Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
Run Code Online (Sandbox Code Playgroud)

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

assertEquals(2.5, person.getScore());
Run Code Online (Sandbox Code Playgroud)

这是我的断言导入:

import static org.junit.Assert.*;
Run Code Online (Sandbox Code Playgroud)

造成这种情况的原因是什么?如何解决这个问题?

小智 29

我猜你的getScore()会返回Double,而不是double.因此编译器很困惑:他应该将两个参数都转换为Object,还是应该只将Double转换为double?

    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
Run Code Online (Sandbox Code Playgroud)

无论如何,我会设置方法返回原始类型double.


M. *_*rov 6

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

assertEquals(2.5, person.getScore(), 0.0);
Run Code Online (Sandbox Code Playgroud)

如果person.getScore()允许与2.5. 例如,如果2.500001可以接受,那么您的测试将变为

assertEquals(2.5, person.getScore(), 0.000001);
Run Code Online (Sandbox Code Playgroud)