engine_test.go

Обзор файла

Файл engine_test.go содержит комплексный набор модульных тестов и бенчмарков для игрового движка, реализованного в пакете game. Цель тестов — проверить корректность основных функций игрового движка, таких как обработка игровых действий (трат маны, получение маны, повышение уровня, крафт предметов, PvP-бои, торговля на рынке), валидация состояний игроков, расчет прогрессии, а также производительность ключевых операций.

Тесты используют фреймворк testing Go и библиотеку testify для удобной проверки условий. В тестах моделируются различные сценарии — успешные операции, ошибки, граничные условия и специфические игровые механики.


Основные компоненты и функции в файле

В этом файле нет объявлений классов или структур, но тесно тестируются методы и функции игрового движка, в частности метод ValidateAction игрового движка и связанные вспомогательные функции.

Тесты создания и инициализации движка


Тесты обработки игровых действий

Используется структура contracts.GameManagerGameAction, описывающая игровое действие с параметрами:

Для каждого типа действия написаны отдельные тесты, проверяющие успешные и ошибочные сценарии.


Тесты пакетной обработки


Тесты игровых механик и вспомогательных функций


Бенчмарки производительности


Важные детали реализации и алгоритмы


Взаимодействия с другими частями системы


Пример использования (на базе теста)

func ExampleValidateSpendMana() {
	engine := NewGameEngine()
	ctx := context.Background()

	playerAddress := common.HexToAddress("0x123...")
	state := PlayerState{
		Player: playerAddress,
		ManaBalance: big.NewInt(1000),
		// остальные поля...
	}

	action := contracts.GameManagerGameAction{
		Player: playerAddress,
		ActionType: 0, // SPEND_MANA
		ManaAmount: big.NewInt(100),
	}

	result := engine.ValidateAction(ctx, action, state)
	if result.Success {
		fmt.Println("Успешно потрачена мана. Новый баланс:", result.NewState.ManaBalance)
	} else {
		fmt.Println("Ошибка:", result.Error)
	}
}

Mermaid диаграмма — Структура тестируемых функций

Файл представляет собой набор тестов, поэтому логично отобразить поток вызовов метода ValidateAction и связанных процессов обработки различных типов действий.

flowchart TD
    A[Start: Test запускается] --> B[Создание GameEngine]
    B --> C[Вызов ValidateAction]
    C --> D{ActionType}
    D -->|0: SPEND_MANA| E[Проверка баланса, списание маны]
    D -->|1: EARN_MANA| F[Добавление маны, проверка лимитов]
    D -->|2: LEVEL_UP| G[Проверка опыта, списание маны, повышение уровня]
    D -->|3: CRAFT_ITEM| H[Парсинг параметров, расчет стоимости и результата]
    D -->|4: PVP_BATTLE| I[Парсинг параметров, проверка, расчет результата боя]
    D -->|5: MARKETPLACE_TRADE| J[Парсинг параметров, проверка, расчет комиссии и результата]
    D -->|default| K[Ошибка: неизвестный тип действия]
    
    E --> L[Возврат результата]
    F --> L
    G --> L
    H --> L
    I --> L
    J --> L
    K --> L

Итог

Файл engine_test.go — это тщательно разработанный и подробный набор тестов, покрывающий большинство аспектов игрового движка: валидацию действий, обработку игровых механик, проверку состояний игроков и производительность. Он служит основой для гарантии качества и устойчивости игрового сервиса, обеспечивая стабильную и предсказуемую работу игровых функций.