Java AssertionError但我得到了正确答案

时间:2015-10-13 21:29:44

标签: java assert

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

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]相同?我根本不知道。

2 个答案:

答案 0 :(得分:1)

在Java中,.equals()的{​​{1}}函数通过Object强制实现相等。由于您的两个列表不代表相同的==,因此在Object来电期间此检查失败。

答案 1 :(得分:1)

  

ArrayList是我自己的ADT

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

您需要覆盖此方法并实现比较元素:大小必须匹配且元素必须成对相等:均为null或两者均为非null且等于其equals方法。