2016-08-31 9 views
0

PokerHandクラスを作成し、JUnitテストを使用してテストしています。何らかの理由で1つのPokerHandオブジェクトを作成したときに1つのテストメソッドでコンストラクタを呼び出すと8回呼び出されます。Javaコンストラクタが複数回呼び出されています

PokerHandコンストラクタ(それが呼び出された回数を確認するためにprint文を追加して、プリントは8回に分け):

//Constructor 
public PokerHand (Card cardOne, Card cardTwo, Card cardThree, Card cardFour, Card cardFive) { 
    System.out.println("creating hand..."); 
    //Initialize value array 
    value = new int[6]; 
    //Initialize cards list, add cards, and check for duplicates 
    cards = new ArrayList<Card>(); 

    cards.add(cardOne); 
    if (cards.contains(cardTwo)) { 
     throw new DuplicateCardException(); 
    } else cards.add(cardTwo); 
    if (cards.contains(cardThree)) { 
     throw new DuplicateCardException(); 
    } else cards.add(cardThree); 
    if (cards.contains(cardFour)) { 
     throw new DuplicateCardException(); 
    } else cards.add(cardFour); 
    if (cards.contains(cardFive)) { 
     throw new DuplicateCardException(); 
    } else cards.add(cardFive); 

    determineValueOfHand(); 
} 

テストケース:

@Test 
    public void testFlush() { 
     PokerHand a = new PokerHand(D10, DJ, DQ, DK, DA); 
    } 

私が見つめてきました私はJUnitのテストとEclipseの新機能ですから、ちょっとしたことが分からないと思います。すべてのヘルプは大

+0

テストクラスには他に何がありますか?たとえば、 'D10'はここでは宣言されていないので、他のものでなければなりません。 – Brick

+0

あなたのテストを含むクラスの完全なコードを提供できますか? –

+0

@Brick私のテストクラスには、52種類のCa​​rdオブジェクトがすべて作成されました – Lanre

答えて

1

あなたのコメントに応じて問題を修正ヒントを高く評価されています。おそらく、あなたの方法にdetermineValueOfHandを()が誤っ PokerHandオブジェクトを作成します。

これを確認するには、私は

  1. コンストラクタ
  2. あなたのテストケース

は、オブジェクト参照を使用してS()printlnをないことをお勧めします。それに加えて、入口/出口トレースをあなたのctorに入れることができます!これは、どのコンストラクター呼び出しが起こるかをより明白にします。

+0

また、コンストラクタにブレークポイントを置き、ブレーク時に*デバッガ*内のコールスタックをチェックしてください。 – Andreas

関連する問題