Java断言错误,但我得到了正确的答案
我在为我的类测试我的一些方法,我得到了以下错误:Java断言错误,但我得到了正确的答案,java,assert,Java,Assert,我在为我的类测试我的一些方法,我得到了以下错误: java.lang.AssertionError: expected: com.company.ArrayList<[ 11 12 ]> but was: com.company.ArrayList<[ 11 12 ]> prg以前在类中声明为private @Test public void testGetOut() throws Exception { List wtf = new ArrayList();
java.lang.AssertionError: expected: com.company.ArrayList<[ 11 12 ]> but was: com.company.ArrayList<[ 11 12 ]>
prg以前在类中声明为private
@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中,对象的.equals()
函数通过=
强制实现相等。由于您的两个列表不代表相同的对象
,因此在调用assertEquals()
期间,此检查失败
ArrayList是我自己的ADT
我冒昧地猜测,您没有在ADT中重写equals
方法。
默认情况下,它继承自对象
,所有不同的实例(由新建
创建)都不相等
您需要重写此方法并实现对元素的比较:大小必须匹配且元素必须成对相等:均为null或均为非null并通过其equals
方法相等。“ArrayList是我自己的ADT”然后显示其equals实现。看起来您实现了自己的com.company.ArrayList
。你能分享它的实现吗?具体来说,您是否覆盖了equals(Object)
方法?是的。我最终没有凌驾于平等之上,而是改变了整个观点。我制作了另一个数组,添加了与我在第一个数组中添加的相同的整数,并使用了方法。对这两个数组执行两次get(0),然后比较结果,如果得到错误的答案,则更改标志。我在国旗上应用了断言。谢谢你的回答,很抱歉没有回复。
public class ProgState {
private List out;
public ProgState(List ot) {
out = ot;
}
public List getOut() {
return out;
}