Больше 1000 тестов для хобби-игры — напрасный труд?
В нашем проекте теперь заметно больше тысячи автоматических тестов: около 990 на стороне сервера и около 120 в клиенте Unity. Для семейного проекта это звучит как перебор. На самом деле всё наоборот — вот почему.
Тесты — наш второй разработчик. В одиночном проекте некому сказать на код-ревью: «Подожди, это ломает крафт». Эту роль выполняют тесты. У каждой игровой механики — рецептов, кислорода, голода, поведения существ, паролей миров — есть тесты, которые запускаются при каждом изменении. Рефакторинг без страха — вот настоящая победа.
Достаточно быстро, чтобы не раздражать. Тесты, которые идут четверть часа, не запускает никто. Поэтому наш барьер CI двухступенчатый: проверка пул-реквеста идёт чуть больше трёх минут и включает быстрые тесты; полный медленный набор запускается потом. Так цикл разработки остаётся бодрым, а покрытие не теряется.
Тестировать Unity — отдельная тема. Логику клиента трудно тестировать внутри работающего движка. Наш приём: ядро клиентской логики живёт в отдельной библиотеке, которая работает без Unity, — её мы тестируем без графики, как обычный код. Только то, что действительно требует движка, идёт как тест EditMode/PlayMode.
Предупреждения — это ошибки. Наш CI собирает с «warnaserror»: любое предупреждение компилятора ломает сборку. Звучит педантично, но так не появляется кладбище предупреждений, в котором в конце концов тонет то самое важное.
Честный итог: написание тестов отнимает, наверное, пятую часть времени разработки. Зато каждая исправленная функция остаётся исправленной — а для проекта, который оживает вечерами после работы, нет ничего ценнее уверенности, что функция выходных не разрушила функцию вторника.
Комментарии