2016-03-27 33 views
0

Kısa süre önce bir Deck sınıfı oluşturdum (ki bu süper sınıf) ve sınıfımın çalışıp çalışmadığını görmek için bir test yöntemi oluşturmaya çalışıyorum.Programdaki alt sınıfın nesi var?

import java.util.List; 
import java.util.ArrayList; 

/** 
* The Deck class represents a shuffled deck of cards. 
* It provides several operations including 
*  initialize, shuffle, deal, and check if empty. 
*/ 
public class Deck 
{ 
/** 
* cards contains all the cards in the deck. 
*/ 
public static List<Card> cards; 

/** 
* size is the number of not-yet-dealt cards. 
* Cards are dealt from the top (highest index) down. 
* The next card to be dealt is at size - 1. 
*/ 
private int size; 
public static Card cardOne; 

/** 
* Creates a new <code>Deck</code> instance.<BR> 
* It pairs each element of ranks with each element of suits, 
* and produces one of the corresponding card. 
* @param ranks is an array containing all of the card ranks. 
* @param suits is an array containing all of the card suits. 
* @param values is an array containing all of the card point values. 
*/ 
public Deck(String[] ranks, String[] suits, int[] values) 
{ 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Heart"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Spade"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Club"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 
    for(int i=0; i<13;i++) 
    { 
     suits[i] = "Diamond"; 
     ranks[i] = cardOne.rank(); 
     values[i] = cardOne.pointValue(); 
     cards.add(cardOne); 
    } 

} 


/** 
* Determines if this deck is empty (no undealt cards). 
* @return true if this deck is empty, false otherwise. 
*/ 
public static boolean isEmpty() 
{ 
    if(cards.size()==0) 
     return true; 
    else 
     return false; 
} 

/** 
* Accesses the number of undealt cards in this deck. 
* @return the number of undealt cards in this deck. 
*/ 
public static int size() 
{ 
    return cards.size(); 
} 

/** 
* Randomly permute the given collection of cards 
* and reset the size to represent the entire deck. 
*/ 
public static List<Card> Shuffled[]; 
public void shuffle() 
{ 
    for(int i=0; i<52; i++) 
    { 
     cards.get(i); 

     int k=(int)(Math.random()*100); 
     while(k >52 || k<0) 
     { 
      k=(int)(Math.random()*100); 
     } 
     if(Shuffled[k]==null) 
      Shuffled[k]=(List<Card>) cards.get(i); 
    } 

} 

/** 
* Deals a card from this deck. 
* @return the card just dealt, or null if all the cards have been 
*   previously dealt. 
*/ 
public Card deal() 
{ 
    int cardDealed= (int)(Math.random()*100); 
    while(cardDealed >52 || cardDealed<0) 
    { 
     cardDealed=(int)(Math.random()*100); 
    } 
    Shuffled[cardDealed].remove(cardDealed); 

    return (Card) Shuffled[cardDealed]; 
} 

/** 
* Generates and returns a string representation of this deck. 
* @return a string representation of this deck. 
*/ 
@Override 
public String toString() 
{ 
    String rtn = "size = " + size + "\nUndealt cards: \n"; 

    for (int k = size - 1; k >= 0; k--) { 
     rtn = rtn + cards.get(k); 
     if (k != 0) { 
      rtn = rtn + ", "; 
     } 
     if ((size - k) % 2 == 0) { 
      // Insert carriage returns so entire deck is visible on console. 
      rtn = rtn + "\n"; 
     } 
    } 

    rtn = rtn + "\nDealt cards: \n"; 
    for (int k = cards.size() - 1; k >= size; k--) { 
     rtn = rtn + cards.get(k); 
     if (k != size) { 
      rtn = rtn + ", "; 
     } 
     if ((k - cards.size()) % 2 == 0) { 
      // Insert carriage returns so entire deck is visible on console. 
      rtn = rtn + "\n"; 
     } 
    } 

    rtn = rtn + "\n"; 
    return rtn; 
    } 
} 

sorun (alt sınıf olan) bir araya DeckTester sınıfı koymak nasıl sergiyi karşılaşıyorum: İşte benim Güverte Sınıfı olduğunu. Şimdiye kadar aşağıdakilere sahibim:

import java.util.List; 

/** 
* This is a class that tests the Deck class. 
*/ 
public class DeckTester extends Deck 
{ 
    public static List<Card> cards; 

    public DeckTester(String[] ranks, String[] suits, int[] values) 
    { 
     super(ranks, suits, values); 
    } 

    /** 
    * The main method in this class checks the Deck operations for consistency. 
    * @param args is not used. 
    */ 
    public static void main(String[] args) 
    { 

    } 
} 

Ayrıca tam işlevli bir Kartları sınıfım var. Deck sınıfını nasıl kontrol edeceğimi bilemiyorum.

cevap

1

Şu anda ne söyleyebileceğimi tested sınıfı ve tester sınıfı inheritance tarafından değil composition tarafından koyar. o ör Junit veya beklentilerinizi eşleşirse

  1. ithalat tested sınıf tester
  2. için yürütmek tested nesne
  3. kontrol bazı mantık tested sınıfa
  4. örneğini oluşturmak:

    Yani zorunda TestNG

+0

ben bunu yapmak zorunda olduğunun farkındayım, konudur (burada JUnit kullanarak) vermem

kullanabileceğiniz çeşitli ayarlar hakkında bilgi girmek ama bu bir örnek olacağını Bunu nasıl yapacağımı bilmiyorum. – Pearlpoodle

+1

Hayır, farkında değilsiniz. 'DeckTester' Deck'i genişletiyor - tamamen yanlış yaklaşım –

1

Rudziankoŭ ile aynı fikirdeyim, test sınıflarını kullanarak kompozisyon sınıflarını kullanmak çok daha kolay olurdu. ,

public class DeckTester { 

    /** 
     Check if deck size is being instantiated correctly 
    */ 
    @Test 
    public void testDeckSize() { 

     String[] ranks = new String[1]; // Not sure what this should be 
     String[] suits = new String[4]; 
     int[] vals = new int[12]; 
     Deck deck = new Deck(ranks, suits, vals); 
     assert deck.size() == 52; 
    } 

} 
İlgili konular