Linux笔记AS笔记 PHP笔记 C笔记 FLASH 3D
返回首页
当前位置: 首页 > 开发笔记 > AS笔记 >

使用Flash Builder 4进行Unit Test

时间:2010-03-10 09:48来源:未知 作者:admin 点击:
作为一个新特性,Flash Builder 4已经集成FlexUnit Test,使用起来很方便,下面我们就以一个Case来谈谈怎样在Flash Builder 4中进行Unit Test。 1. 准备工作。首先用Flash Builder 4在一个Flex工程新建一

 作为一个新特性,Flash Builder 4已经集成FlexUnit Test,使用起来很方便,下面我们就以一个Case来谈谈怎样在Flash Builder 4中进行Unit Test。

1. 准备工作。首先用Flash Builder 4在一个Flex工程新建一个类。如下面代码。

  1. package
  2. {
  3.         import flash.utils.ByteArray;
  4.  
  5.         public class ObjectUtil
  6.         {
  7.                 public static function clone(source:*):* 
  8.                 {
  9.                         var ba:ByteArray = new ByteArray();
  10.                         ba.writeObject(source);
  11.                         ba.position = 0;
  12.                         return ba.readObject();
  13.                 }
  14.         }
  15. }
复制代码

这个工具类实现发对象的深度clone,也就是被复制的目标对象不再是源对象的参照,改变目标对象不会影响源对象。因为ActionScript 3.0和Flex Framework中有不少内置对象,如Date、Object、Array、ArrayColection、BitmapData对象,情况比较多,单元测试正好派上用场。

2. 创建新的FlexUnit TestCase 类。

选择该类>新建>TestCase 类,打开下图所示对话框,一般按默认设置就行了。下图所示。

 

选择应为其生成测试方法存根的方法。下图所示。

 
Flash Builder 4将自动为我们生成TestCase类和主程序文件的结构代码。在TestCase类中,已经有一个没有实现的测试方法,为方便错误跟踪,我们修改成了四个测试方法。如下代码所示。

  1. public function testCloneObject():void
  2. {
  3.         var obj:Object= {name:"Jim", age:25}
  4.         var newObj:Object = ObjectUtil.clone(obj);
  5.         newObj.age = 28;
  6.         assertObjectEquals(obj, {name:"Jim", age:25});
  7. }
  8.  
  9. public function testCloneArray():void
  10. {
  11.         var arr:Array= [1,2];                        
  12.         var newArr:Array = ObjectUtil.clone(arr);
  13.         newArr[1] = 3;
  14.         assertObjectEquals(arr, [1,2]);
  15. }
  16.  
  17. public function testCloneCollection():void
  18. {
  19.         var ac:ArrayCollection = new ArrayCollection([
  20.                 {name:"Jim", age:28},
  21.                 {name:"Tom", age:30}
  22.         ]);
  23.         
  24.         var newAC:ArrayCollection = ObjectUtil.clone(ac);
  25.         newAC.getItemAt(0).name = "Kite";
  26.         assertEquals(ac.getItemAt(0).name, "Jim");
  27. }
  28.  
  29. public function testBitmapData():void
  30. {
  31.         var bmd:BitmapData = new BitmapData(100,100,false);
  32.         bmd.setPixel(10,10,0xFF0000);
  33.         var newBMD:BitmapData = ObjectUtil.clone(bmd);
  34.         newBMD.setPixel(10,10,0x0000FF);;
  35.         assertEquals(bmd.getPixel(10,10), 0x00FF0000);
  36. }
复制代码

3. 创建新的FlexUnit Test Suite 类。选择该类>新建>TestSuie类,打开对话框,输入TestSuie类名,选择目标测试类和方法。下图所示。

 
4. 修改主程序。

打开主程序mxml,做如下修改。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
  3.         xmlns:s="library://ns.adobe.com/flex/spark" 
  4.         xmlns:flexui="flexunit.flexui.*"
  5.         xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="800" minHeight="600"
  6.         creationComplete="creationCompleteHandler()">        
  7.         <fx:Script>
  8.         <![CDATA[
  9.                 import flexUnitTests.UtilSuite;
  10.                 
  11.                 private var flexUnitTests_UtilSuite_obj:flexUnitTests.UtilSuite;
  12.                 
  13.                 protected function creationCompleteHandler():void
  14.                 {
  15.                         testRunner.test = UtilSuite.suite();
  16.                         testRunner.startTest();
  17.                 }
  18.         ]]>
  19.         </fx:Script>
  20.         
  21.         <flexui:TestRunnerBase id="testRunner"
  22.                 width="100%" height="100%"/>
  23.  
  24. </s:Application>
复制代码

5. 运行测试程序。

结果testBitmapData()方法测试失败:TypeError: Error #1034: 强制转换类型失败:无法将 Object@b9b5fb1 转换为 flash.display.BitmapData。

6. 修改错误。其实,BitmapData有自己的clone方法,我们只要将这个方法整合到ObjectUtil类中就行了。

打开ObjectUtil类,添加一个条件,最终代码如下。

  1. public static function clone(source:*):* 
  2. {
  3.         var ba:ByteArray = new ByteArray();
  4.         ba.writeObject(source);
  5.         ba.position = 0;
  6.         if(source is BitmapData)
  7.         {
  8.                 return (source as BitmapData).clone();
  9.         }
  10.         return ba.readObject();
  11. }
复制代码

回到第五步再进行测试,直到全部方法都通过。

 

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容