比较JUnit中的两个对象数组

时间:2013-02-04 16:51:03

标签: java arrays junit tdd

我已经实现了一个卡片游戏,需要测试shuffle方法。我正在使用netbeans 7.2,现在我遇到了一个问题,因为我调用了instance.shuffleDeck方法后deckBeforeShuffle是空的,所以我不能将它与我的deckAfterShuffle数组进行比较,看看它是否被洗牌!这是我第一次使用JUnit并尝试了不同的方法来解决这个问题,但这一切都是徒劳的。

@Test
public void testShuffleDeck() {
    System.out.println("shuffleDeck");
    CardDeck instance = new CardDeck(1);
    ArrayList<Card> deckBeforeShuffle = instance.getDeck();         
    instance.shuffleDeck();        
    ArrayList<Card> deckAfterShuffle = instance.getDeck();        
    boolean isShuffled = false;
    int position = 0;
    System.out.println(deckBeforeShuffle.size());
    while(position<deckBeforeShuffle.size() && !isShuffled){

        if(deckBeforeShuffle.get(position).getSuitValue() != deckAfterShuffle.get(position).getSuitValue() && deckBeforeShuffle.get(position).getvalue() != deckAfterShuffle.get(position).getvalue()){

        isShuffled = true;

        }
        position++;
    }
    assertEquals(true, isShuffled); 
}

我的随机方法!

public void shuffleDeck(){

    ArrayList<Card> temp = new ArrayList();
    Random rand = new Random();
    int position;
    while(deck.size() > 0){

        position = rand.nextInt(deck.size());
        temp.add(deck.remove(position));
    }
    deck = temp;
}

我感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

实际上检查不相等就足够了。列表的equals()方法将处理其余的事情。

assertFalse(deckBeforeShuffle.equals(deckAfterShuffle)); // not equal
assertEquals(deckBeforeShuffle.size(), deckAfterShuffle.size()); // but same size
assertEquals( // and same number of elements
    new HashSet<Card>(deckBeforeShuffle), new HashSet<Card>(deckAfterShuffle); 

对于改组,您可以使用现有的Collections.shuffle()方法。但要注意,你必须先将列表副本复制一遍。

答案 1 :(得分:0)

如本回答所述(以及互联网上的许多其他来源),有assertArrayEquals(),就是这样。