2016-08-26 9 views
1

私は2つのListを操作してcontains()を使用しようとしています。私は大会を壊すことはありませんが、私のクラスの使用法には含まれています。Javaは同じ値をアサートしますがエラーが発生しました

Items.class

class Items implements Comparable<Items> { 
    private String name; 
    private Date date; 
    private Lib.CLASSENUM type; 

    public getDate(); 
    public setDate(); 

    .... 
    public compareTo(Items o) { 
    ... 
    } 
    } 

Test.class

List<Items> actualList; 
List<Items> expectedList; 

public setup() { 
    actualList = new ArrayList<>(); 
    expectedList = new ArrayList<>(); 
} 

class Tests { 
@Test 
public void statusCheckValidatingRedLinePromotionItemsTest() { 
    //this just sets the two ArrayList to clear 
    clearProductMaps(); 
    Items goodsItem = new Items(); 

    goodsItem.setName("Product_A"); 
    goodsItem.setPrice(4.10); 
    goodsItem.setStatus(Lib.CLASSENUM.ORIGINAL); 
    goodsItem.setDate(date); 

    actualList.add(goodsItem); 
    goodsItem = new Items(); 
    goodsItem.settName("Product_A"); 
    goodsItem.setPrice(3.70); 
    goodsItem.setStatus(Lib.CLASSENUM.PROMO); 
    date = calendar.getTime(); 
    goodsItem.setDate(date); 

    actualList.add(goodsItem); 
    goodsItem = new Items(); 
    goodsItem.setName("Product_A"); 
    goodsItem.setPrice(3.70); 
    goodsItem.setDate(date); 
    goodsItem.setStatus(Lib.CLASSENUM.PROMO); 
    expectedList.add(goodsItem); 

    assertTrue(expectedGoods.get(0).contains(actualList.get(0)); 
} 

ザ・が含まれているではありません、本当すべきですか? (O == nullの電子== nullの?:o.equals(e)参照)

答えて

1

ArrayListcontains(..)方法は平等チェックではなく、Compararble<T>実装に依存しているので、あなたが一致する項目を得ることはありません。

equals(..)hashCode()をオーバーライドしてItemクラスに実装すると、テストは合格になります。

また、ArrayList<T>の代わりにCompararble<T>に依存するTreeSet<T>を使用して、封じ込めを確認することもできます。

0

私が気づいたバットのすぐ外にあるものは、スペルミスがあることです。相当のです。 dasblinkenlightが指摘しているように、インタフェースがカスタムソートを扱うのと同等であり、等価性チェックではありません。

+0

は、ソートの期限が過ぎているため、実行時またはコンパイル時に上記の編集時にエラーが表示されませんでした。 –

関連する問題