0

assertEquals を使用して 2 つのリストが同じかどうかを確認しようとしましたが、これは問題なく機能しますが、リストを observableList に変更しようとすると、テストに失敗しました。

では、JUnit で 2 つの監視可能なリストを比較するにはどうすればよいでしょうか? リストの内容だけを比較したい。基本的に、これらの 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 を使用した場合は機能しません

4

1 に答える 1

0

基本的に、この質問の問題は equals および hashCode メソッドにありました。変数 x と変数 y は、最初は DoubleProperty 型であるため、double に変換する必要がありました。したがって、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();
    }

これにより、テストに合格できます

于 2015-02-26T03:42:15.837 に答える