为Flex单元测试重新创建一堆组件(flexunit)

时间:2012-08-02 23:58:02

标签: actionscript-3 flex flexunit

我有一堆NumericSteppers(开始一周,开始一年,结束一周,结束一年),它们深入ViewStacks,NavigatorContents等。我想对我的日期步进器进行单元测试,并想知道我该如何做那?当我初始化顶级父组件时,子组件不会被创建。我是否必须通过迭代树来手动添加所有这些组件(请说不:))?我可以使用UIImpersonator吗?

很抱歉,如果问题是基本的,那么Flex对我来说是一个新手。

1 个答案:

答案 0 :(得分:1)

在Flash中,为GUI组件创建单元测试是有问题的。我通常为控制器,表示模型,调解器(等)编写单元测试 - 即:包含业务逻辑的非GUI类。

为GUI对象编写测试成为一个失败的主张,原因有很多:

  • 视图的逻辑往往需要由用户交互触发
  • 视图可能依赖于在测试中难以模拟/模拟的低级Flash API(NetStream,Camera等)。
  • 在自动运行测试时(例如:由持续集成或构建系统启动),无法运行具有GUI元素(使用舞台或添加到舞台的内容)的测试。
  • 测试往往运行得更慢

我通常避免为像日期步进器这样的组件编写单元测试,我们将它们组合在一起形成更大的“视图”。我通常使用presentation model,如果组件具有应该测试的特定业务逻辑,则测试是针对非gui表示模型类(或控制器,或介体,或其他)编写的。

public class MyViewPM
{
   // write a unit test for this method
   public function onSubmitButtonClick():void
   {
   }
}

public class MyView extends Sprite
{
    // this is injected by your MVC framework
    // or set when the the view is created, or added to stage, etc.
    public var pm:MyViewPM;

    public function MyView()
    {
        submitButton.addEventListener(MouseEvent.Click, onMouseClick);
    }

    private function onMouseClick(event:Event):void
    {
        pm.onSubmitButtonClick();
    }
}