試圖學習如何在Java中進行測試,並認爲我現在已經很久了,因爲感覺就像我的試驗和錯誤越多,我越理解。我無法弄清楚如何通過填充模擬卡來測試甲板?我希望能夠在甲板上洗牌之前測試第一張牌中的第一張牌是真正的兩張牌,或者可以比較一下爲測試製作的全部牌,但現在它完全靜止不動。任何人有任何提示,以良好的方式測試甲板卡?測試一副撲克牌
Card.java
package model;
public class Card {
public enum Value {
Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Knight, Queen, King, Ace
}
public enum Suite {
Hearts, Spades, Diamonds, Clubs
}
private Value value;
private Suite suite;
public Card(Value value, Suite suite) {
if(value == null || suite == null){
throw new IllegalArgumentException("Argument can't be null");
}
this.value = value;
this.suite = suite;
}
public Object getValue() {
return this.value;
}
public Object getSuite() {
return this.suite;
}
public String toString(){
return value + " of " + suite;
}
}
Deck.java
package model;
import java.util.ArrayList;
public class Deck {
private ArrayList<Card> cards = new ArrayList<Card>();
private CardFactory CF = new CardFactory();
public Deck(){
init();
}
public void init() {
for (int i=0; i<13; i++){
for (int j=0; j<4; j++){
//card = cardFactory.createCard(Card.Value.values()[i], Card.Suite.values()[j]);
this.cards.add(CF.createCard(Card.Value.values()[i], Card.Suite.values()[j]));
}
}
}
public Card getCard() {
return cards.remove(0);
}
public int cardsLeft() {
return cards.size();
}
public Card getLastCard() {
return cards.remove(cards.size()-1);
}
}
CardFactory.java
package model;
public class CardFactory {
public Card createCard(Card.Value value, Card.Suite suite){
return new Card(value, suite);
}
}
DeckTest.java
package model;
import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
public class DeckTest {
@Mock private ArrayList<Card> cards;
@Mock private Card card;
@Mock private CardFactory CF;
@InjectMocks private Deck sut;
@Before
public void setUp() throws Exception {
initMocks(this);
}
@Test
public void DeckContains52Cards() {
sut.init();
verify(cards, Mockito.times(52)).add(Mockito.any());
}
@Test
public void getCardIsCalled() {
sut.getCard();
verify(cards).remove(0);
}
@Test
public void cardsLeftIsCalled() {
sut.cardsLeft();
verify(cards).size();
}
@Test
public void getLastCardIsCalled() {
sut.getLastCard();
verify(cards).size();
}
}
'CardFactory'根本無法自由定義要創建哪些卡。這不是工廠的工作方式。 理想情況下,您將創建一個抽象或接口'CardFactory',並且將注入一個具體的實現'PokerDeckCardFactory',它將一次生成所有卡片。您可以通過將其作爲參數傳遞給構造函數來注入CardFactory。 – SJuan76
好吧,工廠主要是爲了能夠嘲笑工廠並返回嘲笑的卡片而不是使用「真正的」卡片(我沒有按照我的想法工作),將新卡片的創建從卡組中移出, 。但我會看看工廠,並返回一個完整的套牌。謝謝 –