-1
JUnitテストShuffleTestを実行すると、「欲しいが呼び出されていない:shuffler.shuffle();」という応答が返されます。 私はこの質問を何度も聞いたことがありますが、私が言うことができる限り、私はそれらの答えが何を言っているのかをしています。私は擬似としてインターフェイスをインスタンス化し、それを私のDeckクラスに注入しています。なぜ呼び出されないのですか?私のモックメソッドが呼び出されないのはなぜですか?
public enum Suit {
SPADE("BLACK"),
CLUB("BLACK"),
HEART("RED"),
DIAMOND("RED");
private final String color;
Suit(String color) {
this.color = color;
}
}
public enum Rank {
ACE, TWO, THREE, FOUR, FIVE, SIX,
SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING;
}
public class Card {
private Suit suit;
private Rank rank;
public Card(Rank rank, Suit suit) {
this.rank = rank;
this.suit = suit;
}
public Suit getSuit() {
return suit;
}
public Rank getRank() {
return rank;
}
public String toString() {
return suit + " of " + rank + ";";
}
}
public class Deck {
private List<Card> cards;
private Shuffler shuffler;
public Deck(Shuffler shuffler) {
this.cards = new LinkedList<Card>();
this.shuffler = shuffler;
shuffler.shuffle(this.cards);
System.out.println("class " + shuffler.getClass());
}
public void shuffle() {
shuffler.shuffle(this.cards);
}
public void addCard(Card card) {
cards.add(0, card);
}
}
public interface Shuffler {
public <T> void shuffle(List<T> items);
}
public class TestDeck {
private Deck deck;
private Shuffler mockShuffler;
public static Deck createFullDeck(Shuffler shuffler) {
shuffler = mock(Shuffler.class);
Deck deck = new Deck(shuffler);
for(Suit s : Suit.values()) {
for(Rank r : Rank.values()) {
deck.addCard(new Card(r, s));
}
}
return deck;
}
@Before
public void before() {
mockShuffler = mock(Shuffler.class);
deck = createFullDeck(mockShuffler);
}
@Test
public void ShuffleTest() {
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) throws Throwable {
System.out.println("Everyday I'm Shuffling");
return null;
}
}).when(mockShuffler).shuffle(Matchers.anyListOf(Card.class));
deck.shuffle();
verify(mockShuffler, times(1)).shuffle(Matchers.anyListOf(Card.class));
}
}
クラップありがとうございました。それは私がMockitoを手作りのスタブに置き換える前から残されていました。 – michaelAdam
この変更の後、模擬は 'Deck'のコンストラクタで1回、' shuffle() 'メソッドを呼び出した後に1回、2回呼び出されます。テストは失敗します。 – Tunaki
なぜ私の質問が下落したのか、 – michaelAdam