我正在为我的班级测试我的一些方法,但我得到了以下错误:
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]相同?我根本不知道。
答案 0 :(得分:1)
在Java中,.equals()
的{{1}}函数通过Object
强制实现相等。由于您的两个列表不代表相同的==
,因此在Object
来电期间此检查失败。
答案 1 :(得分:1)
ArrayList是我自己的ADT
我冒昧地猜测你没有覆盖ADT中的equals
方法。
默认实现它继承自Object
,所有不同的实例(由new
创建)都不相等。
您需要覆盖此方法并实现比较元素:大小必须匹配且元素必须成对相等:均为null或两者均为非null且等于其equals
方法。