Что такое автоматическое тестирование базовых механик игр?
Ручное тестирование механик работает, пока релизы выходят раз в месяц. С ростом команды и частоты сборок ручной QA превращается в узкое место: тестировщик не успевает проверить регрессию после каждого коммита — баги в физике или логике прогрессии доезжают до релиза. За 5 лет работы мы настроили автоматические тесты для 50+ проектов разной сложности и гарантируем стабильность покрытия. PlayMode-тесты выявляют в 3 раза больше багов, чем ручное тестирование, а автоматизация экономит до 70% времени QA.
Самая частая проблема — сломанный CharacterController после изменения slopeLimit или stepOffset. В редакторе всё работает, в ручном прогоне — тоже, но на комбинации скоростей и углов геометрии падает. PlayMode-тест с параметризованным входом систематически покрывает граничные случаи. Та же история с Animator: переход между состояниями ломается при специфической последовательности триггеров — ручная проверка таких сценариев нереалистична.
Вторая зона риска — игровая логика с состояниями. Machine персонажа или GameManager с флагами сессии легко получают невалидный переход (Idle → Attack без Ready) при определённой последовательности инпутов. Ручная проверка после каждого пуша отнимает часы, а автотест ловит за секунду. Также часто сыпятся механики инвентаря: неправильный слот после перетаскивания или потеря предмета при сохранении.
Как настроить автоматическое тестирование базовых механик игр?
Основной стек для Unity — Unity Test Framework (пакет com.unity.test-framework) с двумя режимами: EditMode Tests и PlayMode Tests.
EditMode-тесты — настройка автоматического тестирования
Подходят для чистой логики: балансовые формулы, парсинг данных, расчёт статов, генераторы уровней. Работают быстро, запускаются в CI без GPU. Покрывают до 80% кода, если архитектура развязывает MonoBehaviour.
PlayMode-тесты
Нужны для всего, что завязано на физику (Rigidbody, CharacterController), анимации (Animator, Blend Tree), коллизии и корутины. Тест ждёт реальные тики FixedUpdate. По нашим данным за последние 2 года работы с 15 проектами, PlayMode-тесты выявляют в 3 раза больше багов, чем ручное тестирование. Стенд из 200 тестов ловит до 90% регрессионных ошибок.
| Параметр | EditMode | PlayMode |
|---|---|---|
| Время выполнения | ~1 сек за тест | ~5–15 сек за тест |
| Зависимость от сцены | Нет | Да |
| Покрытие физики | Нет | Да |
| Запуск в CI без GPU | Да | Нет (требуется -nographics) |
Для VR-механик используем XRSimulatedController и XRSimulatedHMD — симуляция рук и головы без физического HMD. Это позволяет гонять тесты XRGrabInteractable и XRRayInteractor в CI на безголовом агенте. Для AR проектов — AR Foundation с симулированными трекерами.
Почему CI-интеграция обязательна?
Без CI тесты превращаются в разовую активность. Мы настраиваем запуск через Unity Test Runner CLI: unity -batchmode -runTests -testPlatform EditMode -testResults results.xml. Результаты парсим в JUnit XML для GitHub Actions, GitLab CI или TeamCity. Настройка включает управление лицензией (Unity License Server или Unity Build Automation) — это стандартный шаг, чтобы не блокировать пайплайн.
Для Unreal Engine используем Automation System (FAutomationTestBase, IMPLEMENT_SIMPLE_AUTOMATION_TEST) — принцип тот же, разная нотация. В обоих движках можно настроить ночной прогон полного набора и быстрый Smoke на каждый коммит.
Что входит в настройку тестирования?
- Аудит кодовой базы — анализ связанности кода и необходимости DI (Zenject, VContainer). Выявляем места, где логика привязана к MonoBehaviour.
- Выделение тестируемых единиц — рефакторинг логики из MonoBehaviour в pure C#-классы. Например, вынос расчёта урона в отдельный класс без зависимостей от Transform.
- Написание тестов — начиная со smoke-набора критичных путей (движение, прыжок, стрельба), расширение граничными случаями (углы наклона, нулевые значения, кратные баги).
- Настройка CI — конфигурация запуска, репортов, лицензирования. Важно: для PlayMode тестов в CI нужна опция
-nographicsи виртуальный дисплей (Xvfb на Linux). - Документация — как добавлять новые тесты, чтобы команда поддерживала покрытие самостоятельно. Передаём шаблон теста и стайлгайд именования.
Пример кода PlayMode-теста для персонажа
[UnityTest] public IEnumerator Character_Move_WithSlope_CorrectSpeed() { var character = new GameObject().AddComponent<CharacterController>(); character.slopeLimit = 45f; yield return null; // проверка скорости при движении вверх по склону } Пример из практики: VR-проект
В одном из проектов мы нашли баг в XRRayInteractor: при определённом угле захвата объект телепортировался в бесконечность. Ручное тестирование не воспроизводило — требовалась 2% вероятность события. PlayMode-тест с 1000 случайных углов стабильно ловил ошибку за 3 секунды. Экономия времени QA — около 200 часов в месяц. После внедрения тестов coverage вырос с 15% до 80% по критическим механикам, а количество багов в релизе снизилось в 4 раза.
| Объём задачи | Ориентировочные сроки |
|---|---|
| Настройка Test Framework + 10–15 базовых тестов | 3–5 дней |
| Полный тестовый набор (50–80 тестов) + CI | 2–4 недели |
| VR-проект с XRSimulated тестами | 3–5 недель |
Стоимость рассчитывается индивидуально после анализа архитектуры проекта. Если вам нужна надёжная система автоматических тестов — свяжитесь с нами для оценки вашего проекта. Оценим сроки и объём работ в течение дня. Получите консультацию по вашему проекту — мы поможем подобрать оптимальный набор тестов и CI-пайплайн.






