【问题标题】:Java AssertionError but I get correct answer [duplicate]Java AssertionError,但我得到正确答案[重复]
【发布时间】:2015-10-13 21:29:44
【问题描述】:

我正在为我的班级测试我的一些方法,但出现以下错误:

java.lang.AssertionError: expected: com.company.ArrayList<[ 11 12 ]> but was: com.company.ArrayList<[ 11 12 ]>

我看不出有什么不同。基本上我所拥有的就是这个测试:

 public void setUp() throws Exception {
    List ot = new ArrayList();
    ot.add(11);
    ot.add(12);
    prg = new ProgState(ot);

}

prg 之前在类中被声明为私有。

@Test
public void testGetOut() throws Exception {
    List wtf = new ArrayList();
    wtf.add(11);
    wtf.add(12);
    assertEquals(wtf, prg.getOut());
}

ArrayList是我自己的ADT,List是接口,ProgState就是:

public class ProgState {
private List out;

public ProgState(List ot) {
    out = ot;
}

public List getOut() {
    return out;
}

它只是返回我的列表。为什么它不接受 ot = [11, 12] 与 wtf = [11, 12] 相同?我完全不知道。

【问题讨论】:

  • "ArrayList 是我自己的ADT" 然后展示它的equals实现。
  • 好像你实现了自己的com.company.ArrayList。你能分享一下它的实现吗?具体来说——你是否覆盖了equals(Object) 方法?
  • 是的,我做到了。我最终没有超越平等,而是改变了整个视角。我制作了另一个数组,添加了我在第一个数组中添加的相同整数,并在它们两个上使用了 .get(0) 方法两次并比较了结果,如果我得到错误的答案,则更改一个标志。我在标志上应用了断言。感谢您的回答,很抱歉没有回复。

标签: java assert


【解决方案1】:

ArrayList 是我自己的 ADT

我冒昧地猜测您没有覆盖 ADT 中的 equals 方法。 默认实现它继承自Object,所有不同的实例(由new 创建)都不相等。

您需要重写此方法并实现元素比较:大小必须匹配并且元素必须成对相等:两者都为 null 或都非 null 并且通过它们的 equals 方法相等。

【讨论】:

    【解决方案2】:

    在 Java 中,Object.equals() 函数通过 == 强制相等。由于您的两个列表不代表相同的 Object,因此在您的 assertEquals() 调用期间此检查失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多