2016-08-31 48 views
0

我創建了一個PokerHand類,並使用JUnit測試來測試它,並且出於某種原因,當我在一個測試方法中調用它時,我構造函數被調用了8次,當時我創建了一個PokerHand對象。被多次調用的Java構造函數

PokerHand構造(增加了打印語句來看看它是如何多次被調用,版畫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測試和日食,所以我相信我只是錯過了一個小細節。任何幫助是極大的讚賞

+0

你還有什麼在你的測試班?例如,因爲'D10'沒有在這裏聲明,所以必須是其他的東西。 – Brick

+0

你能爲包含你的測試的類提供完整的代碼嗎? –

+0

@Brick我在測試類中創建了所有52個不同的Card對象 – Lanre

回答

1

一個提示,根據您的意見解決了這一問題:可能是你的方法determineValueOfHand()錯誤地創建其他 PokerHand對象。

爲了檢查;我建議

  1. 你的構造
  2. 你的測試用例

並調用println()S使用的對象引用。除此之外,你可以把入口/出口痕跡放入你的ctor中!這使得構造函數調用發生的順序更爲明顯。

+0

或者在構造函數中放置斷點,並在斷點時檢查* debugger *中的調用堆棧。 – Andreas