Автоматизация модульного тестирования в Unity с помощью Codemagic

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Чем дольше вы работаете над крупными проектами в Unity, тем больше вы убеждаетесь в том, что существуют целые области, которые имеют основополагающее значение для создания надежного долгосрочного проекта, которые вы, возможно, даже не рассматривали при работе с небольшими проектами. В частности, к ним можно отнести модульное тестирование (или юнит-тестирование), хотя оно сложное и иногда самую малость муторное. С помощью модульного тестирования, разбивая кодовую базу на небольшие логические блоки и проверяя, работает ли каждый из них на детальном уровне, вы обеспечиваете прочную основу для своего приложения и избегаете регрессии кода.

Но настроить модульные тесты и автоматизировать их в Unity может быть довольно сложно. По этому предлагаю вам сегодня обсудить, как создавать и автоматизировать модульные тесты в Unity, используя конвейер CI/CD, созданный с помощью Codemagic.

Итак, из этой статьи вы узнаете:

  • Почему автоматизированные модульные тесты необходимы для эффективной гибкой разработки.

  • С какими проблемами можно столкнуться при автоматизации модульного тестирования в Unity.

  • Как создать простую игру (понг), которую мы будем использовать в качестве примера проекта.

  • Как настроить модульные тесты для нашей игры.

  • Как настроить Codemagic для автоматизации модульного тестирования и сборки проектов Unity.

За дело!

DevOps и автоматизация

Слово “DevOps”, представляющее собой конкатенацию “development” (разработка) и “operations” (операции), — это расплывчатый термин, которое может описывать разные вещи: команду (DevOps Team), набор практик, философию… В целом, речь идет об использовании всего лучшего из мира разработки и IT для создания лучшего кода и выпуска релизов легким и непрерывным образом.

DevOps — это философия, которой, например, обычно следуют веб-разработчики. Когда вы работаете на крупной онлайн-платформе, вам необходимо регулярно выпускать новые версии и обновлять программное обеспечение для своих клиентов. Поскольку это онлайн-сервис, вам, по сути, необходимо актуализировать исходный код где-то на другом компьютере (все мы знаем, что любое облако — это просто чей-то другой компьютер) последними обновлениями, чтобы выкатить свой новый релиз.

И вы, естественно, хотели бы избежать серьезного бага в вашем релизе или блокировки вашей инфраструктуры из-за строки кода с ошибкой. А учитывая, как часто вы будете релизить что-то новое (будь то огромный рефакторинг или очень небольшое исправление багов), было бы намного лучше, если бы все тестирование на наличие ошибок и публикация выполнялись автоматически, верно?

В этом весь смысл одной из основных задач DevOps: непрерывной интеграции и непрерывной доставки, или CI/CD. Это ключевые процессы в традиционной разработке программного обеспечения, которые направлены на автоматизацию доставки вашего продукта вместе с инструментами контроля версий, а также на то, чтобы эта доставка не вызывала никаких проблем, не приводила к простоям и не требовала срочных исправлений.

Вот почему модульное тестирование является фундаментальной концепцией DevOps: оно является одним из ключевых звеньев в цепочке автоматизации, потому что оно гарантирует, что код, который вы релизите, правилен и не приведет к сбою продукта после релиза. Поэтому процессы CI/CD в качестве обязательного шага обычно где-то интегрируют модульное тестирование. Если модульные тесты не пройдены, процесс доставки прерывается, и версия с ошибками не релизится.

Unity и автоматизация

Проблема с базовым инструментом CI/CD Unity

Лично я считаю, что Unity не очень хорошо оптимизирован для автоматизации непрерывной доставки. Философия DevOps не так легко воплощается в  жизнь при работе с этим движком.

Справедливости ради я должен отметить, что сейчас в движок Unity встроены специальные инструменты, а именно Unity Cloud Build, которые пытаются восполнить этот пробел и удовлетворить потребность в автоматизации проектов Unity. Но у них есть свои ограничения. В частности:

  • Unity Cloud Build не позволяет публиковать релизы. Довольно часто ваш конвейер CI/CD должен заканчиваться фактической доставкой вашего обновления на устройство пользователя или в интернет-магазин (например, Google Play или App Store). Unity Cloud Build не может этого сделать, и вам все равно придется позаботиться об этом финальном этапе самостоятельно!

  • Инструмент также довольно медленный: даже не смотря на то, что там есть некоторые варианты кэширования, на данный момент Unity Cloud Build явно не оптимизирован с точки зрения скорости.

  • Кроме того, Unity Cloud Build не так хорошо работает с Git (отчасти потому, что Unity больше полагается на Perforce, который обычно лучше подходит для обмена цифровыми активами… и менее популярен среди разработчиков!).

  • Наконец, Unity Cloud Build работает только с проектами Unity, поэтому, если ваш проект комбинирует Unity, скажем, с React Native или другим фреймворком, вы не сможете использовать для него Unity Cloud Build.

Все это делает Unity Cloud Build хорошим, но все еще не идеальным выбором CI/CD для Unity. Он поможет вам с автоматизацией только до определенного этапа, а это может выливаться в некоторые довольно “крайностных” заморочках…

Codemagic спешит на помощь

Если вы не хотите иметь дело с этими трудностями, хорошая альтернатива для Unity Cloud Build — это Codemagic!

Этот онлайн-инструмент позволяет быстро настроить CI/CD, подключив свои Git-репозитории и выполнив всего несколько шагов настройки. Он также также позволяет вам получить доступ к определенному оборудованию: с Codemagic вы можете легко собрать свою игру для Mac, iOS, Windows, Android и т. д. Этот сервис также хорошо масштабируется с точки зрения цены и значительно упрощает публикацию вашего проекта в App Store или Google Play.

Итак, сегодня я покажу вам, как с помощью Codemagic автоматизировать некоторые процессы на примере игры на Unity (это будет несложная реализация понга).

Простая реализация понга

Примечание: Код проекта этого примера доступен на GitHub!

Источник: https://habr.com/ru/company/otus/blog/654263/


Интересные статьи

Интересные статьи

Привет, Хабр! Меня зовут Максим Васянович, я спикер курса “Веб-верстка” в Skillbox. Сегодня поговорим о верстке, а точнее - о нюансах работы с псевдоэлементами before и after. Статья будет полезна, пр...
Привет, Хабр! На связи Гончик, любитель APM (application performance monitoring) инструментов, в частности Glowroot. Сегодня расскажу о том, как за кратчайшее время найти узкие места в Confl...
Из этой статьи вы узнаете, как использовать фотограмметрию для фотосканирования и вставки объектов реального мира в проекты Unity при помощи Meshroom. В контексте 3d-моделей фото...
Мне было необходимо делать 2 раза в сутки бэкап сайта на «1С-Битрикс: Управление сайтом» (файлов и базы mysql) и хранить историю изменений за 90 дней. Сайт расположен на VDS под уп...
В прошлой статье я описал алгоритм, позволяющий строить более интересные (в противовес более коротким, как делают всякие яндексы-гуглы) пешеходные маршруты между двумя точками. Алгоритм загружал ...