Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash的单元测试AS3代码_Flash_Actionscript 3_Unit Testing - Fatal编程技术网

Flash的单元测试AS3代码

Flash的单元测试AS3代码,flash,actionscript-3,unit-testing,Flash,Actionscript 3,Unit Testing,我试图通过为我所从事的Flash项目的ActionScript 3代码编写单元测试来改进我的代码,但我在理解如何在Flash程序的上下文中处理它时遇到了一个心理障碍。我似乎不知道如何处理addChild和stage之类的事情,以及Flash应用程序典型的异步处理(等待加载的AddEventListener等)。它真的和其他语言有什么不同吗?开发人员如何处理Flash程序的独特环境 一些澄清: 这与Flex无关,根本不涉及Flex 程序只涉及AS3代码文件和包含资产的FLA 我喜欢将应用程序逻辑

我试图通过为我所从事的Flash项目的ActionScript 3代码编写单元测试来改进我的代码,但我在理解如何在Flash程序的上下文中处理它时遇到了一个心理障碍。我似乎不知道如何处理addChild和stage之类的事情,以及Flash应用程序典型的异步处理(等待加载的AddEventListener等)。它真的和其他语言有什么不同吗?开发人员如何处理Flash程序的独特环境

一些澄清:

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

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

例如:假设你有一个Flash游戏,其中有一个玩家可以攻击敌人。你可能有一个类
玩家
,一个类
怪物
,还有一个方法
玩家。攻击(怪物:怪物)

您的单元测试将在
玩家
怪物
中设置值,并调用
攻击()
,然后确保结果正确

您的前端显示器、舞台、可单击对象等以及UI在实时环境中适当时也会调用这些对象


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

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

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

如果您的项目是由用户交互驱动的,特别是面向游戏而不是面向RIA的,那么规划一组好的测试序列与测试本身一样重要。例如,您可以尝试操作A,然后尝试操作B,知道B依赖于A,因为这就是您编写它的方式。测试人员可能会在A之前尝试B,这是一种您可能没有预料到的场景,如果A和B作为单元单独测试,则不会捕捉到这种场景。这也可能意味着您需要编写3或4个测试:A、B、A->B和B->A,这样状态的数量就可以失控

要考虑的是像FrasUnk这样的测试框架来自动化许多任务。


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

+1也是一个很好的答案。我总是很难想出涵盖UI中所有可能的测试。为模型编写测试(获取/发送数据到服务器或在后台计算分数)要容易得多。Flexunit具有陡峭的学习曲线。我明确建议研究hamcrest-as3,flexunit的一个附加组件,这在imo的assert部门更有意义。对于将UI与Flash应用程序中的逻辑分离,您有什么好的建议吗?我发现这很难做到,因为Flash与视觉表现紧密相连。我想我的最大问题是我倾向于将UI和逻辑捆绑在一起。例如,我经常将一个类的所有代码(视觉动画以及状态和逻辑)放在库资源导出的同一个类中。你有没有关于使用MVC和Flash示例的资源?