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
方法。
我正在为我的 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
方法。