当前位置: 首页 > 知识库问答 >
问题:

模棱两可的方法调用断言中的断言相等(对象,对象)和断言中的断言相等(双,双)都匹配:

斜淳
2023-03-14

我收到以下错误:

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

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

assertEquals(2.5, person.getScore());

这是我的断言导入:

import static org.junit.Assert.*;

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


共有3个答案

卫沈义
2023-03-14

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

    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);
穆正祥
2023-03-14

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

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

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

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

范飞翰
2023-03-14

getScore()返回的是双精度,而不是双精度。因此编译器感到困惑:它应该将两个参数都转换为对象,还是只将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

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

 类似资料:
  • 在我的JUnit测试中,我将预期的XML文件与解析器创建的虚拟文档进行比较: 但区别声称并不相似。那么如何正确比较这两个XML文档呢?

  • 例如,我正在进行web自动化测试,假设我有两个非常基本的场景: 测试a)步骤1:将记录添加到数据库步骤2:检查网站是否正确显示记录 测试b)步骤1:在网站上编辑记录步骤2:检查记录是否正确保存在数据库中 根据记录,假设它是一个带有“值”的简单文本字段 因此,对于第一种情况,我将使用Assert equal: 但是,对于第二种情况,它将是: 所以基本上它们都做相同的事情,但都是相反的,为了在断言不正

  • 我在Codewars.com参加培训测试, 说明是: 在此kata中,您必须在给定字符串的情况下,用字母在字母表中的位置替换每个字母。 如果文本中的任何内容不是字母,请忽略它,不要返回它。“A”=1,“B”=2. 我已经制作了这样的PHP脚本 但当我提交我的答案时,它包含的错误就像 请谁能帮忙修一下?告诉我为什么它显示错误的细节?

  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,

  • 更新 更准确地说。我想知道这两个列表是否有相同的对象,两个列表都没有额外的对象,顺序无关紧要。例如:

  • 我找到了junit的解决方案,但需要TestNG的解决方案。还有比编写一个自己的for循环更有用的想法吗?