单元测试AS3 Flash代码

时间:2011-02-05 21:58:39

标签: flash actionscript-3 unit-testing

我正在尝试通过为我正在处理的Flash项目编写ActionScript 3代码的单元测试来改进我的代码,但是我在智能障碍中理解如何在Flash程序的上下文中处理它。我似乎无法解决如何处理addChild和stage等事务,以及Flash应用程序典型的所有异步处理(addEventListeners等待加载的事情等)。它真的与其他语言有什么不同吗?开发人员如何处理Flash程序的独特环境?

一些澄清:

  • 这与Flex无关,根本不涉及Flex。
  • 程序仅涉及AS3代码文件和包含资产的FLA。

2 个答案:

答案 0 :(得分:11)

好问题。挑选要测试的项目的哪些部分是一个挑战 - 单个类或类集合,或两者兼而有之。

尽管围绕用户界面测试进行测试可以捕获许多逻辑和事件错误,但UI通常会发生很多奇怪的事情。 Flash项目中的许多错误都可能是由于意外的用户交互模式 - 基本上beta测试人员在UI中做了一些你从未想过要做的事情。

如果您的项目是由用户交互驱动的,尤其是面向游戏而不是面向RIA,那么计划一套良好的测试序列与测试本身一样重要。例如,您可以尝试操作A,然后执行操作B,知道B依赖于A,因为这就是您编写它的方式。测试人员可以在A之前尝试B,这可能是您没有预料到的情况,如果A和B作为单位独立测试则不会被捕获。这也可能意味着你想要写3或4个测试:A,B,A-> B和B-> A,所以状态的数量可能会失控。

需要考虑的是像Flexunit这样的测试框架,可以自动完成许多任务。

编辑:我应该注意到FlexUnit也适用于纯AS3。

答案 1 :(得分:6)

我喜欢从前端显示内容中抽象出应用程序逻辑。我认为对前端/显示器进行单元测试非常有用,但您可以对系统的内部逻辑和功能进行单元测试。这是MVC设计模式。

例如:假设您有一个Flash游戏,其中有一个玩家可以攻击敌人。您可能有一个班级Player,一个班级Monster和一个方法Player.attack(monster:Monster)

您的单元测试会在PlayerMonster中设置值,然后调用attack(),然后确保结果正确。

您的前端显示器,舞台,可点击的对象等以及UI也将在实际环境中适当地调用这些对象。

单元测试将在一个单独的.swf文件中运行,该文件执行导入模型对象(PlayerMonster以及您可能拥有的任何其他内容)的测试,但完全忽略您的所有视觉/显示元素。我会避免单元测试涉及用户交互的任何事情。