Flex单元测试:”等待一会儿”

在Flex程序中,有时,某语句的执行结果会在语句执行过后好一会儿才彻底显现。在这种情况下,编写单元测试就需要”等待一会儿”的操作。如果是Java的单元测试,那么直接写sleep()语句即可,但是Flex中并没有sleep()语句,也没有任何语法规则来直接表达”等待一会儿”的操作。因此,在Flex单元测试中实现”等待一会儿”需要一些技巧:

private var EVENT_AWHILE:String = "EVENT_AWHILE";

[Test(async)]
public function testInitializeData():void {  
    _obj.initializeData();

    var handler:Function = Async.asyncHandler(this, verifyInitializeDataHandler, 2000);
    _obj.addEventListener(EVENT_AWHILE, handler);
    setTimeout(dispatchEventAfterAWhile, 1500);
}

private function verifyInitializeDataHandler(event:Event, passThroughObj:Object):void {  
    //assert the data is initialized.
}

private function dispatchEventAfterAWhile():void {  
    _obj.dispatchEvent(new Event(EVENT_AWHILE));
}

这种写法的原理是:待测对象监听EVENT_AWHILE事件,并在事件监听器中实现真正的测试工作(assert),而EVENT_AWHILE事件则被设定为1.5秒后触发,于是间接实现了sleep的功能。