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
| Weryfikacja | Oczekiwany wynik |
|---|---|
| X wygrywa wszystkie 8 linii | find_winner zwraca ('X', linia) dla każdego |
| O wygrywa wszystkie 8 linii | find_winner zwraca ('O', linia) dla każdego |
| Puste/niekompletne pole | find_winner zwroty (None, None) |
| Znany losowanie | is_draw(board) is True |
| Ostatni ruch wygrywa jednocześnie | find_winner wygrywa, is_draw is False |
| Ruch na zajęte pole | attempt_move niczego nie zmienia, current_player to samo |
| Skręt za game_over | attempt_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