Rozdział 17 · Testy

Testowanie gry bez Tkinter

Czysta logika jest bezpośrednią nagrodą dla architektury: testujemy zasady gry bez ani jednego otwartego okna.

Dlaczego czysta logika jest łatwa do przetestowania

test_bez_okna.py
board = ["X", "X", "X", "", "", "", "", "", ""]
winner, line = find_winner(board)
assert winner == "X"
# Brak otwartego okna Tkinter – tylko lista linie i regularna funkcja.
Bezpośrednia nagroda za architekturę sekcji 17.20
Jest to możliwe właśnie dlatego, że find_winner/is_draw nic o Tkinter. Jeśli zwycięzca był wyłoniony bezpośrednio w obsłudze kliknięć przycisków, trzeba by go przetestować przez prawdziwe okno i prawdziwe kliknięcia.

Pełna macierz testowa gry

WeryfikacjaOczekiwany wynik
X wygrywa wszystkie 8 liniifind_winner zwraca ('X', linia) dla każdego
O wygrywa wszystkie 8 liniifind_winner zwraca ('O', linia) dla każdego
Puste/niekompletne polefind_winner zwroty (None, None)
Znany losowanieis_draw(board) is True
Ostatni ruch wygrywa jednocześniefind_winner wygrywa, is_draw is False
Ruch na zajęte poleattempt_move niczego nie zmienia, current_player to samo
Skręt za game_overattempt_move niczego nie zmienia
new_round()po opróżnieniu game_over=False konto jest ZAPISANE
new_match()to samo, ale licznik ZEROWANY
Sprawdź wszystkie osiem linii, a nie tylko jedną losowo
Test tylko jednej linii nie wykryje literówki w opisie przekątnej – Debug Lab 9 (sekcja 17.29) jest zaprojektowana dokładnie tak, aby jedna łańcuch znaków testu jej nie zauważyła.
Praktyka: pełny zestaw testów bez Tkinter
Automatyczna weryfikacja — cała macierz regresji gry: 8 linii × 2 graczy, remis, ostatni ruch, nieprawidłowy ruch, reset
Otwórz praktykę →