Модульное тестирование кода AS3 для Flash - PullRequest
17 голосов
/ 06 февраля 2011

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

Несколько уточнений:

  • Это не имеет ничего общего с Flex, Flex вообще не задействован.
  • В программах используются только файлы кода AS3 и FLA-файлы с активами.

Ответы [ 2 ]

11 голосов
/ 06 февраля 2011

Отличный вопрос.Сложно выбрать, какие части проекта тестировать - один класс или набор классов, или оба.

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

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

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

Редактировать: Следует отметить, что FlexUnit работает и для чистого AS3.

6 голосов
/ 06 февраля 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...