使用Flash Builder 4进行Unit Test

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

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

package
{
    import flash.utils.ByteArray;
    public class ObjectUtil
    {
        public static function clone(source:*):*
        {
            var ba:ByteArray = new ByteArray();
            ba.writeObject(source);
            ba.position = 0;
            return ba.readObject();
        }
    }
} 

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

2. 创建新的FlexUnit TestCase类。

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

测试用例

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

选择方法

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

public function testCloneObject():void
{
    var obj:Object= {name:"Jim", age:25}
    var newObj:Object = ObjectUtil.clone(obj);
    newObj.age = 28;
    assertObjectEquals(obj, {name:"Jim", age:25});
}

public function testCloneArray():void
{
    var arr:Array= [1,2];			
    var newArr:Array = ObjectUtil.clone(arr);
    newArr[1] = 3;
    assertObjectEquals(arr, [1,2]);
}

public function testCloneCollection():void
{
    var ac:ArrayCollection = new ArrayCollection([
	{name:"Jim", age:28},
	{name:"Tom", age:30}
    ]);
	
    var newAC:ArrayCollection = ObjectUtil.clone(ac);
    newAC.getItemAt(0).name = "Kite";
    assertEquals(ac.getItemAt(0).name, "Jim");
}

public function testBitmapData():void
{
    var bmd:BitmapData = new BitmapData(100,100,false);
    bmd.setPixel(10,10,0xFF0000);
    var newBMD:BitmapData = ObjectUtil.clone(bmd);
    newBMD.setPixel(10,10,0x0000FF);;
    assertEquals(bmd.getPixel(10,10), 0xFF0000);
}

注意,在FlexUnit 1 test中, 每个你创建的方法的方法名都必须以test开头, 这个是为了让测试运行器辨识需要测试的方法。

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

测试用例

4. 修改主程序。

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

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:s="library://ns.adobe.com/flex/spark" 
	xmlns:flexunit="flexunit.flexui.*"
	xmlns:mx="library://ns.adobe.com/flex/halo" 
	minWidth="800" minHeight="600" 
        creationComplete="onCreationComplete()">	
	<fx:Script>
		<![CDATA[
			import flexUnitTests.UtilSuite;
	
			private function onCreationComplete():void
			{
				testRunner.test = UtilSuite.suite();
				testRunner.startTest();
			}
	]]>
	</fx:Script>
	<flexunit:TestRunnerBase id="testRunner" 
	 	width="100%" height="100%"/>
</s:Application>

5. 运行测试程序。

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

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

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

public static function clone(source:*):* 
{
	var ba:ByteArray = new ByteArray();
	ba.writeObject(source);
	ba.position = 0;
	if(source is BitmapData)
	{
		return (source as BitmapData).clone();
	}
	return ba.readObject();
}

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

另外,FlexUnit 4 test所用代码更简单,还支持元数据标签。通过运行方式〉FlexUnit 测试,可以直接生成主程序代码。FlexUnit 4 test的界面是总结性的,很简单,还有就是FlexUnit 面版,大家有空可以试一下。

更多关于FlexUnit Test的文章

上一篇上一篇: Flex 4新书
下一篇下一篇: DateTimeAxis高级应用
来自文章来自: 本站原创
引用引用通告: 查看所有引用 | 我要引用此文章
标签Tags: FlashBuilder4
相关相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭