2015-02-23 28 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(); 
    } 

这将使测试通过