Unity и юнит-тестирование

Tulenber 13 March, 2020 ⸱ Beginner ⸱ 3 min ⸱

50 Оттенков зелёного

На дворе 21й век, а значит тестирование одна из важных частей разработки не только в геймдеве, но и в любом программном продукте.

В больших компаниях тестирование входит в процесс разработки и обычно им занимается отдел QA(Quality assurance или Проверки качества). В мелких же компаниях каждый суслик агроном и эта роль ложится на кого попало (хотя обычно это ГД или программист), что часто заканчивается анекдотом: “Чукча не читатель!”, игры выходят в сыром состоянии, а тестирование в итоге проводится на игроках. =)

Техническая сторона проверки качества это тоже довольно большая тема, с солидным набором инструментария начиная с Unity Remote (в нашем случае с Unity, который помогает тестировать на устройстве разработчику), всяких Test Flight и закрытых каналов в Google Play (для тестирования на более глобальном уровне), а заканчивая инструментами для логгинга https трафика с целью проверки каких-нибудь специфических запросов.

Эта статья будет про создание юнит-тестов, небольшой части огромной темы, которая должна облегчить жизнь программистам.

Юнит-тесты

Особый всплеск интереса к тестированию можно отметить в начале 2000х, где апогеем можно считать формирование понятий экстремального программирования(Extreme Programming) и разработки через тестирование(Test-driven development), где Юнит-тестирование(Unit-testing) является одним из основополагающих инструментов. Найти информацию по этой тематике в интернете довольно легко, так что не будем заострять своё внимание на объяснениях основ. Если же вам необходима дополнительная информация с примерами, начните с википедии, а дальше по необходимости.

Юнит-тесты в Unity можно создавать при помощи Unity Test Framework, основанном на NUnit. Так как это довольно объёмный фреймворк, то ознакомиться с его документацией будет нелишним.

Добавление теста будет проходить на примере Hints Library, о создании которой рассказывалось в предыдущем посте:

  1. Открываем инспектор тестов Window > General > Test Runner
    Open Test Runner

  2. Переключаемся в PlayMode и создаём при помощи кнопки "Create PlayMode Test Assembly Folder" папку для наших тестов
    Create Tests folder

  3. При помощи кнопки "Create Test Script in current folder" создаём файл для тестов
    Create Test Script

  4. Для кода нуждающегося в тестировании создаём Create > Assembly Definition
    Create Assembly Definition

  5. В файл Tests.asmdef, находящийся в папке Tests, добавляем ссылку на Assembly Definition нашего кода
    Add Assembly Definition

  6. Не забываем нажать кнопку Apply внизу и сохранить изменения

  7. В скрипт, созданный на шаге 3, пишем наши тесты

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    public class TestSuit
    {
        // Инициализируем окружение один раз
        [OneTimeSetUp]
        public void Setup()
        {
            // Инициализируем менеджер подсказок
            new GameObject().AddComponent<KhtHintsManager> ();
        }
        
        [UnityTest]
        public IEnumerator TestKhtHintsManager()
        {
            // Тест на существование инстанса менеджера
            Assert.NotNull(KhtHintsManager.Instance);
            yield return null;
        }
    }
    

  8. Запускаем тесты
    Run tests

  9. Радуемся результату
    Get results

Заключение

Это маленький пример для демонстрации создания юнит-теста. В дальнейшем на алтарь тестирования должно быть положено много времени и кода, часто код тестов оказывается даже больше, чем код бизнес-части, но это поможет сохранить вам уйму времени на вылавливание ошибок, связанных с регрессом. При этом юнит-тесты это всего лишь небольшая часть всего необходимого тестирования, ещё нужно добавить интеграционные тесты, а также протестировать UI, но это выходит за границы статьи о юнит-тестах. Пока! =)



Privacy policyCookie policyTerms of service
Tulenber 2020