Що таке автоматичне тестування базових механік ігор?
Ручне тестування механік працює, поки релізи виходять раз на місяць. З ростом команди та частоти збірок ручний 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-пайплайн.






