2015-02-23 27 views
0

我試着檢查兩個列表是否使用assertEquals相同,這工作得很好,但試圖將列表更改爲observableList時,測試失敗。比較Junit中的兩個observableLode

那麼如何比較JUnit中的兩個可觀察列表?我只想比較列表的內容。基本上,這些observableLists包含Point對象,並且在Point類中我有hashCodeBuilder和equalsBuilder方法。列表比較需要hashCode()equals()方法,但我不確定ObservableList是否需要它們。

public class TestClass { 
    private MyClass myclass; 
    ObservableList<Point> TestPoints = FXCollections.observableArrayList(); 

    /** 
    * @throws java.lang.Exception 
    */ 
    @Before 
    public void setUp() throws Exception { 
     myclass = new MyClass(); 

     TestPoints.add(new Point(300.0,200.0)); 
     TestPoints.add(new Point(600.0,500.0)); 
     TestPoints.add(new Point(100.0,100.0)); 
     TestPoints.add(new Point(200.0,200.0)); 
     TestPoints.add(new Point(100.0,500.0)); 
     TestPoints.add(new Point(600.0,100.0)); 
    } 

    @Test 
    public void testClass() { 
     ObservableList<Point> expectedResult = FXCollections.observableArrayList(); 
     expectedResult.add(new Point(100.0,100.0)); 
     expectedResult.add(new Point(100.0,500.0)); 
     expectedResult.add(new Point(600.0,500.0)); 
     expectedResult.add(new Point(600.0,100.0)); 

     ObservableList<Point> actualResult = FXCollections.observableArrayList(); 
     actualResult = myclass.giftWrapping(TestPoints); 

     assertEquals(expectedResult, actualResult); 
    } 

這點類

public class Point { 

    private final DoubleProperty x; 
    private final DoubleProperty y; 

    public Point() { 
     this(0, 0); 
    } 

    public Point(double x, double y) { 
     this.x = new SimpleDoubleProperty(x); 
     this.y = new SimpleDoubleProperty(y); 
    } 
@Override 
public int hashCode() { 
    HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); 
    hashCodeBuilder.append(x); 
    hashCodeBuilder.append(y); 
    return hashCodeBuilder.toHashCode(); 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) { 
     return true; 
    } 
    if (obj == null) { 
     return false; 
    } 
    if (!(obj instanceof Point)) { 
     return false; 
    } 
    Point other = (Point) obj; 
    EqualsBuilder equalsBuilder = new EqualsBuilder(); 
    equalsBuilder.append(x, other.x); 
    equalsBuilder.append(y, other.y); 
    return equalsBuilder.isEquals(); 
} 

如果我用一個列表,但如果我用了一個observableList

+0

您有興趣僅比較列表的內容或你也想比較更改觀察列表的綁定設置? – jewelsea 2015-02-23 18:21:05

+0

如果您只想比較列表的當前內容,那麼'assertEquals'應該可以正常工作。除非你有一個'ObservableList'的實現沒有正確地覆蓋'equals'。你的'ObservableList'從哪裏來? – 2015-02-23 18:28:11

+0

我想僅比較列表的內容。基本上,這些observableLists包含Point對象,而在Point類中我有hashCodeBuilder和equalsBuilder方法。 hashCode和equals(需要0個方法才能進行列表比較,但我不確定它們是否需要ObservableList – Sammson 2015-02-23 18:56:42

回答

0

基本問題這個問題是不不行這會工作equals和hashCode方法。變量x和變量y必須轉換爲雙精度,因爲它們最初是DoubleProperty類型的。所以在Point類的equals和hashCode方法應該如下

@Override 
    public int hashCode() { 
     HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); 
     hashCodeBuilder.append(x.doubleValue()); 
     hashCodeBuilder.append(y.doubleValue()); 
     return hashCodeBuilder.toHashCode(); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) { 
      return true; 
     } 
     if (obj == null) { 
      return false; 
     } 
     if (!(obj instanceof Point)) { 
      return false; 
     } 
     Point other = (Point) obj; 
     EqualsBuilder equalsBuilder = new EqualsBuilder(); 
     equalsBuilder.append(x.doubleValue(), other.x.doubleValue()); 
     equalsBuilder.append(y.doubleValue(), other.y.doubleValue()); 
     return equalsBuilder.isEquals(); 
    } 

這將使測試通過