-2

カードゲームを実装しましたが、シャッフルメソッドをテストする必要があります。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;
}

助けてくれてありがとう!

4

2 に答える 2

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()シャッフルについては、既存の方法を使用できます。ただし、シャッフルする前にリストのコピーを作成する必要があることに注意してください。

于 2013-02-04T16:56:25.970 に答える
0

この回答 (およびインターネット上の他の多くの情報源) で説明されているように、まさにそれを行うassertArrayEquals()があります。

于 2013-05-07T19:39:41.083 に答える