Глава 17 · Тестирование

Тестируем игру без Tkinter

Чистая логика — прямая награда за архитектуру: тестируем правила игры без единого открытого окна.

Почему чистая логика легко тестируется

test_bez_okna.py
board = ["X", "X", "X", "", "", "", "", "", ""]
winner, line = find_winner(board)
assert winner == "X"
# Ни одного открытого окна Tkinter — просто список строк и обычная функция.
Прямая награда за архитектуру раздела 17.20
Это возможно именно потому, что find_winner/is_draw ничего не знают про Tkinter. Если бы победитель определялся прямо внутри обработчика клика по кнопке — тестировать пришлось бы через настоящее окно и настоящие клики.

Полная тестовая матрица игры

ПроверкаОжидаемый результат
X выигрывает все 8 линийfind_winner возвращает ('X', линия) для каждой
O выигрывает все 8 линийfind_winner возвращает ('O', линия) для каждой
Пустое/неполное полеfind_winner возвращает (None, None)
Известная ничьяis_draw(board) is True
Последний ход одновременно выигрываетfind_winner побеждает, is_draw is False
Ход в занятую клеткуattempt_move ничего не меняет, current_player тот же
Ход после game_overattempt_move ничего не меняет
new_round()поле пустое, game_over=False, счёт СОХРАНЁН
new_match()то же самое, но счёт ОБНУЛЁН
Проверяйте все восемь линий, а не одну строку наугад
Тест только для одной строки не поймает опечатку в описании диагонали — Debug Lab 9 (раздел 17.29) устроен именно так, чтобы одна строка теста его бы не заметила.
Практика: полный набор тестов без Tkinter
Автоматическая проверка — вся регрессионная матрица игры: 8 линий × 2 игрока, ничья, последний ход, невалидный ход, сброс
Открыть практику →