有歧义的方法调用 Assert 中的 assertEquals(Object, Object) 和 Assert 中的 assertEquals(double, double) 匹配:
Ambiguous method call Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match:
我收到以下错误:
Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
对于我的 Junit
测试中的这行代码,请注意 getScore
() returns a double
:
assertEquals(2.5, person.getScore());
这是我的断言导入:
import static org.junit.Assert.*;
是什么原因造成的,我该如何解决?
如果您对使用 Assert.assertEquals(double, double)
(原始版本)特别感兴趣,请尝试调用允许偏差的覆盖方法并将允许的偏差设置为零,如下所示:
assertEquals(2.5, person.getScore(), 0.0);
如果允许 person.getScore()
与 2.5
略有不同,您可能还希望第三个参数不为零。例如,如果 2.500001
是可以接受的,那么你的测试就变成
assertEquals(2.5, person.getScore(), 0.000001);
你的 getScore() returns 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
无论如何,我会将方法设置为return基本类型double。
如果您特别想避免强制转换并使用原始版本,您可以从包装器对象中获取原始结果。例如:
double a = 2.0;
Double b = 2.0;
assertEquals(a, b.doubleValue()); //Deprecated so use the one with delta
Integer c = 2;
int d = 2;
assertEquals(c.intValue(), d);
Long e = 2L;
long f = 2L;
assertEquals(e.longValue(), f);
我有同样的错误,我从这个改变:
assertEquals("Server status code is: " + wmResp.getStatusCode() , 200, wmResp.getStatusCode());
对此
assertEquals("Server status code is: " + wmResp.getStatusCode() , Integer.valueOf(200), wmResp.getStatusCode());
发生这种情况是因为第一行编译器将 200 作为原始值(整数而不是整数 class)
我收到以下错误:
Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
对于我的 Junit
测试中的这行代码,请注意 getScore
() returns a double
:
assertEquals(2.5, person.getScore());
这是我的断言导入:
import static org.junit.Assert.*;
是什么原因造成的,我该如何解决?
如果您对使用 Assert.assertEquals(double, double)
(原始版本)特别感兴趣,请尝试调用允许偏差的覆盖方法并将允许的偏差设置为零,如下所示:
assertEquals(2.5, person.getScore(), 0.0);
如果允许 person.getScore()
与 2.5
略有不同,您可能还希望第三个参数不为零。例如,如果 2.500001
是可以接受的,那么你的测试就变成
assertEquals(2.5, person.getScore(), 0.000001);
你的 getScore() returns 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
无论如何,我会将方法设置为return基本类型double。
如果您特别想避免强制转换并使用原始版本,您可以从包装器对象中获取原始结果。例如:
double a = 2.0;
Double b = 2.0;
assertEquals(a, b.doubleValue()); //Deprecated so use the one with delta
Integer c = 2;
int d = 2;
assertEquals(c.intValue(), d);
Long e = 2L;
long f = 2L;
assertEquals(e.longValue(), f);
我有同样的错误,我从这个改变:
assertEquals("Server status code is: " + wmResp.getStatusCode() , 200, wmResp.getStatusCode());
对此
assertEquals("Server status code is: " + wmResp.getStatusCode() , Integer.valueOf(200), wmResp.getStatusCode());
发生这种情况是因为第一行编译器将 200 作为原始值(整数而不是整数 class)