2014-01-30 2 views
0

Я пытаюсь проверить дубликаты карт в игре с покрой и выбросить исключение, когда это произойдет. Я не знаю, в чем проблема с кодом. Когда я тестирую тест Junit, он терпит неудачу! Я не знаю почему! Ошибка говорит: java.lang.Exception: Неожиданное исключение, ожидаемое, но было Любая помощь!Ошибка при обработке исключений для дубликатов карт в игре Pokerhand.

// это класс, который создает исключение Дубликат карты

public class DuplicateCardException extends RuntimeException{ 

    public DuplicateCardException(String string) { 
     super(string); 
    } 

} 

// Это покер рука класс, который проверяет, когда карты будут дублировать

import java.util.ArrayList; 
import java.util.Collections; 

public class PokerHand implements Comparable <PokerHand> { 

public final int CARDS_NUMBER = 5; 
private ArrayList<Card> cards = new ArrayList<Card>(); 


public PokerHand (Card card1 , Card card2, Card card3, Card card4, Card card5) { 

    cards.add(card1); 
    cards.add(card2); 
    cards.add(card3); 
    cards.add(card4); 
    cards.add(card5); 
    Collections.sort(cards); 
    checkCorrectness(); 
} 

private boolean checkCorrectness() { 
    if (cards.size() != CARDS_NUMBER) 
     throw new DuplicateCardException("Incorrect number of cards!! "); 

    for (int i=0 ; i< cards.size()-1; i++) { 
     for (int j=i+1 ; j< cards.size(); j++) { 
      if (i==j) 
       continue; 
      if (cards.get(i).equals(cards.get(j))) 
      throw new DuplicateCardException("Duplicat card"); 

     } 
    } 

    return true; 
} 

@Override 
public int compareTo(PokerHand arg0) { 

    return 0; 
} 

public String toString() { 
    return cards.get(0).toString() + " " + cards.get(1) + " " + cards.get(2) + " " + cards.get(3)+ " "+ cards.get(4) ; 
} 
} 

// Здесь тестовый код для этого исключения, но он не работает !!!

@Test(expected = DuplicateCardException.class) 
    public void testPair2() { 
    PokerHand a = new PokerHand(H3, CA, D4, H6, DA); 
    a.toString(); 
    PokerHand b = new PokerHand(H3, C5, HA, SA, C6); 
    System.out.println(a); 
    System.out.println(b); 

    assertTrue(a.compareTo(b) < 0); 
    } 
+0

Показать, пожалуйста, стек. –

+0

java.lang.Exception: Неожиданное исключение, как ожидается но \t в org.junit.internal.runners.statements.ExpectException.evaluate (ExpectException.java:28) \t в орг .junit.runners.ParentRunner.runLeaf (ParentRunner.java:271) \t at org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:70) –

+0

Это означает, что исключение не было выбрано, но assertTrue обнаружил 'false вместо этого. –

ответ

2

Это, вероятно, не вызывает ожидаемое исключение, потому что вы не даете ему дубликатов карт. Это не сравнение рук друг с другом, просто с другими картами в одной руке.

также утверждение

assertTrue(a.compareTo(b) < 0); 

если неудачу, потому что вы жестко CompareTo вернуть 0. Это исключение вы получаете.

+0

Да, ты избил меня. :) –

+0

На самом деле, вот здесь и есть преступник. –

Смежные вопросы