Подтвердить что ты не робот

Тестирование модуля AS3 для Flash

Я пытаюсь улучшить свой код, написав модульные тесты для моего кода ActionScript 3 для проектов Flash, над которыми я работаю, но у меня есть умственное препятствие, чтобы понять, как справиться с ним в контексте Flash-программы. Кажется, я не могу окунуться в то, как работать с такими вещами, как addChild и сцена, а также асинхронная обработка, типичная для Flash-приложений (addEventListeners для ожидания загрузки вещей и т.д.). Это действительно какой-то другой, чем любой другой язык? Как разработчик имеет дело с уникальной средой программы Flash?

Несколько пояснений:

  • Это не имеет никакого отношения к Flex, Flex не задействован вообще.
  • Программы включают только файлы кода AS3 и активы, содержащие FLA.
4b9b3361

Ответ 1

Отличный вопрос. Задача состоит в том, чтобы выбрать, какие части тестируемого проекта - один класс или набор классов, или и то, и другое.

Хотя тестирование вокруг тестирования пользовательского интерфейса может уловить многие ошибки в логике и событии, пользовательский интерфейс обычно бывает много странных вещей. Многие ошибки в проекте Flash могут быть вызваны непредвиденными режимами взаимодействия с пользователем - в основном тестер бета-тестирования делает что-то в пользовательском интерфейсе, о котором вы никогда бы не подумали.

Если ваш проект управляется взаимодействием с пользователем, особенно ориентированным на игры, а не ориентированным на RIA, планирование хорошей последовательности тестов так же важно, как и сами тесты. Например, вы можете попробовать действие A, затем действие B, зная, что B зависит от A, потому что вы его написали. Тестер может попробовать B до A, сценарий, который вы, возможно, не ожидали, и тот, который не был бы пойман, если A и B были протестированы независимо как единицы. Это также может означать, что вы хотели бы написать 3 или 4 теста: A, B, A- > B и B- > A, поэтому количество состояний может выйти из-под контроля.

Что-то для рассмотрения - это среда тестирования, такая как Flexunit для автоматизации многих задач.

Изменить: я должен отметить, что FlexUnit работает и для чистого AS3.

Ответ 2

Мне нравится абстрагироваться от логики приложения от внешнего интерфейса. Я не считаю, что это очень полезно для модульного тестирования интерфейса/дисплея, но вы можете unit test внутреннюю логику и функциональность системы. Это шаблон дизайна MVC.

Например: предположим, что у вас есть Flash-игра, в которой есть игрок, который может атаковать врагов. У вас может быть класс Player, класс Monster и метод Player.attack(monster:Monster).

В ваших модульных тестах будут установлены значения в Player и Monster и вызовите attack(), а затем убедитесь, что результаты верны.

Ваш внешний интерфейс, объекты сцены, интерактивные объекты и т.д. и пользовательский интерфейс также вызовут эти объекты, когда это необходимо, в живой среде.

Единичные тесты будут выполняться в отдельном файле .swf, который выполняет тесты, которые импортируют объекты модели (Player, Monster и все, что у вас есть), но полностью игнорируют все ваши визуальные/отображаемые элементы. Я бы избегал модульного тестирования всего, что связано с взаимодействием с пользователем.