繁体   English   中英

不明确的方法调用 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 () 返回一个double

assertEquals(2.5, person.getScore());

这是我的断言导入:

import static org.junit.Assert.*;

这是什么原因造成的,我该如何解决?

您的 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

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

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

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

如果允许person.getScore()2.5略有不同,您可能还希望第三个参数不是零。 例如,如果2.500001是可以接受的,那么你的测试变成

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

如果您特别想避免强制转换并使用原始版本,则可以从包装器对象中获取原始结果。 例如:

    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 作为原始值(整数而不是整数类)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM