我已经实现了一个卡片游戏,需要测试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;
}
我感谢任何帮助!
答案 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(),就是这样。