Java AssertionError 但我得到正确答案

Java AssertionError but I get correct answer

我正在为我的 class 测试我的一些方法,但我收到以下错误:

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 之前在 class 中声明为私有。

@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] 相同?我完全不知道。

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

ArrayList is my own ADT

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

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