Разбейте ваш код на тестируемые части.
Во-первых, генератор, который создает возможно бесконечный поток игровых состояний, но только по требованию:
def game_gen(self):
for active_player in self.players:
yield self.move(active_player)
Для этого требуется self.move
длявернуть то, что оценивается, а не просто делать саму оценку.Это что-то также должно содержать активного игрока в качестве атрибута для последующего использования.
Затем напишите функцию, которая потребляет поток состояний игры:
def game_loop(self, stream):
for move in stream:
self.evaluate(move) # Evaluate the move returned by self.move
if self.game_checker.is_game_complete():
return move.player # The player that made the move
Теперь у вас есть две проверяемые части.Предметы, полученные с помощью game_gen
, можно проверять по одному, не дожидаясь окончания всей игры до завершения цикла.game_loop
больше не генерирует неявно игру;он получает последовательность ходов, сгенерированную game_gen
, или искусственные тестовые данные, которые вы создаете сами, чтобы убедиться, что цикл завершается (или не прекращается) по мере необходимости.