2015-10-13 76 views
1

我在測試我的一些方法我的課,我得到了以下錯誤:Java的Asse田,但我得到正確的答案

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

+4

_「ArrayList是我自己的ADT」_然後顯示它的equals實現。 –

+4

好像你實現了你自己的'com.company.ArrayList'。你能分享它的實現嗎?具體來說 - 你是否覆蓋了'equals(Object)'方法? – Mureinik

+0

是的,我做到了。我最終沒有壓倒平等,而是改變了整個觀點。我創建了另一個數組,添加了我在第一個數組中添加的相同整數,並在兩個方法上都使用了方法.get(0)兩次,並比較結果,如果我得到錯誤答案,則更改標記。我在國旗上應用了assert。感謝您的回答,並感謝您不回覆。 – Charlotte45

回答

1

ArrayList is my own ADT

我敢冒險猜測你沒有重寫ADT中的equals方法。 由默認實現它從Object繼承,所有不同的實例(由new創建)不相等。

您需要重寫此方法並實現比較元素:大小必須匹配,並且元素必須成對相等:均爲null或兩者都爲非null,並等於它們的equals方法。

1

在Java中,Object.equals()函數通過==執行相等操作。由於您的兩個列表不代表相同的Object,因此您的assertEquals()呼叫期間此檢查失敗。