Именование моделей против MonoBehaviours

Недавно я столкнулся с проблемой, когда вы не можете создать экземпляр MonoBehaviours в модульных тестах, поэтому я прохожу процесс перемещения всего моего кода, не связанного с Unity (код, который не имеет доступа ни к каким MonoBehaviour полям / методам), в отдельные классы модели, которые затем используются в соответствующем MonoBehaviour классе. Однако во всех примерах Unity, которые я видел, весь код связан с данным игровым объектом в MonoBehaviour классе. Например, орк в игре имеет свой код в классе Orc, производном от MonoBehaviour. Так что мне трудно назвать свои классы, когда я разделяю единственный Orc MonoBehaviour класс на модель орка и орка MonoBehaviour. Есть ли рекомендации по передовой практике, которым нужно следовать при именовании MonoBehaviour классов по сравнению с именованием соответствующего класса модели?


person Ben Rubin    schedule 16.07.2016    source источник
comment
Я бы предпочел сделать это правильно. Программирование игр не похоже на «программирование приложений». Модульное тестирование - в большинстве случаев - немного глупо. Вот ссылка на аналогичный вопрос с ответом, объясняющим, что и почему stackoverflow.com/questions/2418845/   -  person    schedule 16.07.2016
comment
Этот вопрос, кажется, в основном касается того, как писать хорошие тесты для игр. Мой вопрос больше о том, как назвать мои классы. В моем примере выше я хотел бы иметь Orc класс, для которого я пишу тесты. Но в книгах / примерах Unity, которые я видел, будет скрипт орка (полученный из MonoBehaviour), прикрепленный к орку в сцене. Я ищу рекомендацию о том, как назвать эти MonoBehaviour сценарии, поскольку сценарий будет сценарием орков, но Orc уже является именем класса модели.   -  person Ben Rubin    schedule 16.07.2016
comment
Модульный тест @Mark не похож на глупость, он позволяет тестировать метод без запуска проекта, с множеством различных входных данных и сообщать о красном флаге, когда изменение одного фрагмента кода влияет на другой (и многое другое). Сэкономлено бесчисленное количество часов. На самом деле это случай найма для нас, заявителя, утверждающего, что он не выполняет тесты на бесполезность, потому что это Unity ... ну, ему лучше быстро научиться.   -  person Everts    schedule 16.07.2016
comment
@BenRubin Соглашение об именах - это ваш звонок. У каждого (компании тоже) есть свои. Например. для ИИ я всегда называю сценарии AI_ [whatItDoes], например AI_Navigation, AI_PlayerInfoReceiver и т. д. Если это орк, и я кодирую общее орочье поведение (если femaleOrc любит другое, если сам орк бросает вызов или подчиняется другому убийству), я называю это AI_Orc . Структурирование классов и правильное тестирование - по ссылке. Соглашение об именах - это ваш выбор, или вы можете использовать лучшие практики Google, но для вдохновения вот этот: dev.xeushack.com/   -  person    schedule 16.07.2016
comment
Если вы все еще потерялись и хотите получить качественный ответ, подробно опишите проблему. Я рад помочь, но, судя по приведенной выше информации, я могу рассказать только об общих передовых методах. Орк и класс орков сами по себе очень «вырваны из контекста». Нарисуйте общую картину и приведите несколько конкретных примеров проблем, с которыми вы сталкиваетесь, и целей, которые вы ставите перед своим кодом на момент тестирования.   -  person    schedule 16.07.2016
comment
Все эти разговоры бессмысленны :) В Unity есть простой конкретный ответ, который Эвертс дал ниже.   -  person Fattie    schedule 16.07.2016


Ответы (1)


Игры, как и любые другие приложения, могут запускать тесты. Если бы тестирование в играх было бесполезным, Unity не тратила бы часы на разработку инструмента.

Как и любые другие приложения, некоторые части не могут быть протестированы, как ввод, который полагается на фреймворк. В Unity все методы движка, такие как Update, Collision и т. Д., Нельзя протестировать, но их можно подделать.

Другой случай в Unity - MonoBehaviour, но вы можете легко обойти это, следуя этому сообщению в блоге:

http://blogs.unity3d.com/2014/07/28/unit-testing-at-the-speed-of-light-with-unity-test-tools/

По сути, класс MB получает все действия и обратные вызовы, связанные с Unity. Логика, которую необходимо протестировать, находится в настраиваемом классе.

Что касается именования, вы можете использовать XXXXController (МБ) и XXXContainer (не МБ).

В своем тесте вы сосредотачиваетесь на тестировании XXXContainer, который содержит всю логику.

person Everts    schedule 16.07.2016
comment
Спасибо. Это именно то, что я искал. - person Ben Rubin; 16.07.2016