Java 比较JUnit中的两个对象数组

Java 比较JUnit中的两个对象数组,java,arrays,junit,tdd,Java,Arrays,Junit,Tdd,我已经实现了一个纸牌游戏,需要测试洗牌方法。我使用的是netbeans 7.2,现在出现了一个问题,因为调用instance.shuffleDeck方法后deckBeforeShuffle是空的,所以我无法将它与我的deckBeforeShuffle数组进行比较,以查看它是否被洗牌!这是我第一次使用JUnit,并尝试了不同的方法来解决这个问题,但都是徒劳的 @Test public void testShuffleDeck() { System.out.println("shuffleD

我已经实现了一个纸牌游戏,需要测试洗牌方法。我使用的是netbeans 7.2,现在出现了一个问题,因为调用instance.shuffleDeck方法后deckBeforeShuffle是空的,所以我无法将它与我的deckBeforeShuffle数组进行比较,以查看它是否被洗牌!这是我第一次使用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 testShuffleDeck(){
System.out.println(“shuffleDeck”);
CardDeck实例=新的CardDeck(1);
ArrayList deckBeforeShuffle=instance.getDeck();
instance.shuffleDeck();
ArrayList deckAfterShuffle=instance.getDeck();
布尔值isShuffled=false;
int位置=0;
System.out.println(deckBeforeShuffle.size());
while(位置0){
位置=rand.nextInt(deck.size());
温度添加(甲板移除(位置));
}
甲板=温度;
}

谢谢你的帮助

实际上,只要检查一下不相等就足够了。列表的方法将处理其余部分

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); 
assertFalse(deckBeforeShuffle.equals(deckAfterShuffle));//不相上下
assertEquals(deckBeforeShuffle.size(),deckBeforeShuffle.size());//但尺寸一样
assertEquals(//和相同数量的元素
新哈希集(deckBeforeShuffle)、新哈希集(deckAfterShuffle);

对于洗牌,您可以使用现有的方法。但是,请注意,在洗牌之前,您必须复制列表。

如本答案所述(以及互联网上的许多其他来源)除此之外,您还可以在
deckBeforeShuffle
上写入,并检查每个元素是否位于
deckAfterShuffle
List@Fusselchen是的,但我认为这是偏执的,毕竟,如果大小正确,顺序错误,还有什么其他因素呢?但我有一个新想法…dec在我调用instance.shuffleDeck方法之后,kBeforeShuffle总是空的。如果这些信息对我有帮助的话,我正在使用JUnit 4。我以前从未编写过测试,我不明白为什么它在instance.shuffleDeck方法之后会空called@Zok那个么你们的shuffleDeck方法是错误的。把它加到你们的问题中,我们可能会发现错误我添加了我的shuffleDeck方法。但是当我打印甲板阵列时,它看起来很有效
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);