有歧义的方法调用 Assert 中的 assertEquals(Object, Object) 和 Assert 中的 assertEquals(double, double) 匹配:

新手上路,请多包涵

我收到以下错误:

 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.*;

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

原文由 java123999 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

原文由 Bechyňák Petr 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

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

原文由 M. Prokhorov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题