/
sibiskus
/
Drive_Studio
Обзор
Документация
Войти
/
sibiskus
/
Drive_Studio
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/test_integration.py
99 строк
4 KB
Snezha
из-за разделения контроллера музыка оказалась в разных классах, произошел фикс музыки, теперь она играет всегда
22 июн 2026, 20:08
22 июн 2026, 20:08
112b68b
Код
Авторство
О чём код?
import pytest from unittest.mock import patch, MagicMock import pygame from controller.game_controller import GameController from controller.collision_manager import CollisionManager @patch('pygame.display.set_mode') # Заглушка для окна игры, чтобы тест не ругался на отсутствие экрана @patch('pygame.image.load') # пока что не нужно, но в будущем будут использоваться картинки в игре @patch('pygame.mixer') # так же пока что не нужно, но на будущее, музыка будет def test_integration_player_crash_scenario(mock_mixer, mock_image_load, mock_set_mode): """ Интеграционный тест: Сценарий 'Авария' Проверяет цепочку: Спавн машины трафика -> Обновление сетки -> Обнаружение столкновения через UniformGrid -> Смерть игрока и статус LOSE_CRASH """ mock_surface = MagicMock(spec=pygame.Surface) mock_surface.get_rect.return_value = pygame.Rect(0, 0, 40, 70) mock_image_load.return_value = mock_surface mock_player = MagicMock() mock_player.rect = pygame.Rect(200, 500, 40, 70) mock_player.get_rect.return_value = mock_player.rect mock_player.is_alive = True mock_road = MagicMock() controller = GameController(player=mock_player, road=mock_road) controller.game_state = "PLAYING" controller.obstacles.clear() controller.coins.clear() controller.fuels.clear() mock_obstacle = MagicMock() mock_obstacle.rect = pygame.Rect(200, 500, 40, 70) mock_obstacle.get_rect.return_value = mock_obstacle.rect controller.obstacles.append(mock_obstacle) collision_manager = CollisionManager(cell_size=100) collision_manager.rebuild_grid(controller.obstacles, controller.coins, controller.fuels) result = collision_manager.check_collisions( controller.player, controller.obstacles, controller.coins, controller.fuels ) controller.apply_collision_result(result) assert "crash" in result["events"] assert controller.player.is_alive is False, "Игрок должен был погибнуть!" assert controller.game_state == "LOSE_CRASH", f"Ожидался статус LOSE_CRASH, но получен {controller.game_state}" @patch('pygame.display.set_mode') @patch('pygame.image.load') @patch('pygame.mixer') def test_integration_player_collect_coin_scenario(mock_mixer, mock_image_load, mock_set_mode): """ Интеграционный тест: Сценарий 'Сбор монетки' Проверяет цепочку: Спавн монетки -> Попадание в сетку -> Пересечение с игроком -> Увеличение счета монет -> Удаление монетки из игры. """ mock_surface = MagicMock(spec=pygame.Surface) mock_surface.get_rect.return_value = pygame.Rect(0, 0, 30, 30) mock_image_load.return_value = mock_surface mock_player = MagicMock() mock_player.rect = pygame.Rect(200, 500, 40, 70) mock_player.get_rect.return_value = mock_player.rect mock_player.is_alive = True mock_road = MagicMock() controller = GameController(player=mock_player, road=mock_road) controller.game_state = "PLAYING" controller.coin_score = 0 controller.obstacles.clear() controller.coins.clear() controller.fuels.clear() mock_coin = MagicMock() mock_coin.rect = pygame.Rect(200, 500, 30, 30) mock_coin.get_rect.return_value = mock_coin.rect controller.coins.append(mock_coin) collision_manager = CollisionManager(cell_size=100) collision_manager.rebuild_grid(controller.obstacles, controller.coins, controller.fuels) result = collision_manager.check_collisions( controller.player, controller.obstacles, controller.coins, controller.fuels ) controller.apply_collision_result(result) assert "coin" in result["events"] assert controller.coin_score == 1, f"Ожидался счет монет 1, но получен {controller.coin_score}" assert mock_coin not in controller.coins, "Монетка должна быть удалена из списка после сбора!"