import de.deversmann.BlackJackSpiel; import de.deversmann.Karte; import de.deversmann.Kartenstapel; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.when; class BlackJackSpielTest { @Mock private Kartenstapel mockStapel; @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); } @Test void testGetHandGibtKorrekteHandZurueck() { // Konfigurieren des Mocks, um spezifische Karten zurückzugeben when(mockStapel.zieheKarte()) .thenReturn(new Karte("Herz", "10")) .thenReturn(new Karte("Karo", "Ass")); // Initialisieren des Spiels mit dem gemockten Kartenstapel BlackJackSpiel spiel = new BlackJackSpiel(mockStapel); // Überprüfen, ob die Hand des Spielers die erwarteten Karten enthält assertEquals(2, spiel.getHand().size()); assertEquals("Herz", spiel.getHand().get(0).farbe()); assertEquals("10", spiel.getHand().get(0).wert()); assertEquals("Karo", spiel.getHand().get(1).farbe()); assertEquals("Ass", spiel.getHand().get(1).wert()); } @Test void testGetHandGibtKorrekteHandMit3KartenZurueck() { // Konfigurieren des Mocks, um spezifische Karten zurückzugeben when(mockStapel.zieheKarte()) .thenReturn(new Karte("Herz", "9")) .thenReturn(new Karte("Karo", "Ass")) .thenReturn(new Karte("Pik", "Ass")); // Initialisieren des Spiels mit dem gemockten Kartenstapel BlackJackSpiel spiel = new BlackJackSpiel(mockStapel); spiel.zieheWeitereKarte(); // Überprüfen, ob die Hand des Spielers die erwarteten Karten enthält assertEquals(3, spiel.getHand().size()); assertEquals("Herz", spiel.getHand().get(0).farbe()); assertEquals("9", spiel.getHand().get(0).wert()); assertEquals("Karo", spiel.getHand().get(1).farbe()); assertEquals("Ass", spiel.getHand().get(1).wert()); assertEquals("Pik", spiel.getHand().get(2).farbe()); assertEquals("Ass", spiel.getHand().get(2).wert()); assertEquals(21, spiel.getPunkte()); } @Test void testBlackjackMitZweiKarten() { when(mockStapel.zieheKarte()).thenReturn(new Karte("Herz", "Ass"), new Karte("Pik", "König")); BlackJackSpiel spiel = new BlackJackSpiel(mockStapel); assertEquals(21, spiel.getPunkte()); } @Test void testUeber21MitMehrerenKarten() { when(mockStapel.zieheKarte()) .thenReturn(new Karte("Herz", "10"), new Karte("Pik", "8"), new Karte("Karo", "4")); BlackJackSpiel spiel = new BlackJackSpiel(mockStapel); spiel.zieheWeitereKarte(); // Zieht die dritte Karte assertTrue(spiel.getPunkte() > 21); } @Test void testAssWertAnpassung() { when(mockStapel.zieheKarte()) .thenReturn(new Karte("Herz", "Ass"), new Karte("Pik", "9"), new Karte("Karo", "Ass")); BlackJackSpiel spiel = new BlackJackSpiel(mockStapel); spiel.zieheWeitereKarte(); // Zieht die dritte Karte assertEquals(21, spiel.getPunkte()); } }