2010-11-24 32 views
-3

我正在測試以查看這兩個對象是否相等,但它返回false。有人可以向我解釋爲什麼會發生這種情況嗎?謝謝。Equals(Obj)測試

public boolean equals(Object obj) { 
    if(obj instanceof SparsePolynomial) 
    { 
    return true; 
    } 
    return false; 
} 

@Test 
public void testEqualsObj() 
{ 
    ArrayList<Integer> k = new ArrayList<Integer>(); 
    k.add(1); 
    k.add(3); 
    SparsePolynomial d = new SparsePolynomial(k); 
    ArrayList<Integer> k2 = new ArrayList<Integer>(); 
    k.add(1); 
    k.add(3); 
    SparsePolynomial d2 = new SparsePolynomial(k2); 
    Assert.assertTrue(d.equals(d2)); 
} 
+0

代碼看起來好像沒什麼問題 – hhafez 2010-11-24 21:26:38

+3

它完美的作品在這裏很好。你確定你向我們展示了一切嗎? – Bozho 2010-11-24 21:28:25

+0

這是錯誤的平等。我更新了它。 – Meat 2010-11-24 21:30:32

回答

0

嘗試,而不是Assert.assertTrue(d.equals(d2));

1

沒有足夠的信息可以肯定的,但我懷疑,要麼:

  • equals沒有定義爲SparsePolynomial的方法。也許你已經將它定義在一個超類或一個不相關的類上。
  • 更改一些代碼後,您尚未重新編譯所有相關的類。

編輯

  1. 它是使用@Override註釋標誌,你打算equals方法重寫(或執行)的超類或接口中定義的方法是一個好主意。 (這裏沒有什麼區別,但是它會告訴你是否在方法簽名中犯了錯誤。)
  2. 您對用於測試的Assert方法的更改應該對結果沒有影響。
  3. 您顯示的equals方法顯然是虛假的。它只是測試obj參數的類型,並忽略其狀態。按照書面說明,每次測試一個SparsePolynomial實例時,應該返回true
0

我試過了你的代碼,測試通過了。

你可以找到確切的測試情況下,我在這裏使用:

public class SparsePolynomialTest { 
    public static class SparsePolynomial { 
     private List<Integer> list; 

     public SparsePolynomial(List<Integer> list) { 
      this.list = list; 
     } 

     public boolean equals(Object obj) { 
      if (obj instanceof SparsePolynomial) { 
       return true; 
      } 
      return false; 
     } 
    } 

    @Test 
    public void testEqualsSparse() { 
     ArrayList<Integer> k = new ArrayList<Integer>(); 
     k.add(1); 
     k.add(3); 
     SparsePolynomial d = new SparsePolynomial(k); 
     ArrayList<Integer> k2 = new ArrayList<Integer>(); 
     k2.add(1); 
     k2.add(3); 
     SparsePolynomial d2 = new SparsePolynomial(k2); 
     Assert.assertEquals(true, d.equals(d2)); 
    } 
} 
相關問題