测试:Junit,HttpUnit,EasyMock,FlexUnit这是我们常见的单元测试。这里我将讲解最新版本的FlexUnit4.
由于Flex的独特,故单元测试的结果,将以MXML(最终编译为flash与html)的形式显示出来。
FlexUnit4
1。一个用于显示单元测试结果的MXML文件。
2。再1中的MXML中创建以个用于监听测试结果的组件:TestRunnerBase
3。一个FlexUnitCore(Flex单元测试核心),创建后,需要为该测试核心指定测试见过监听器,2中TestRunnerBase。
4。3中的测试核心,需要检测的测试单元集合(TestSuite)
5。TestCase的实现,并再TestSuite实例对象中保存。
实例一:
package cn.vicky.test.assert { /** * 需要测试的类 */ public class TestAssert { public function TestAssert() { } /** * 如果i>10返回i/10否则返回i。 */ public function done_1(i:Number):Number{ return i > 10 ? i/10 : i; } } }
package cn.vicky.test.assert { import org.flexunit.asserts.*; public class TestAssertCase { public function TestAssertCase() { } [Test] public function testTest_1_done_1():void{ var test1:TestAssert = new TestAssert(); assertTrue(test1.done_1(1) == 1); } [Test] public function testTest_1_done_2():void{ var test1:TestAssert = new TestAssert(); assertFalse(test1.done_1(12) == 12); } } }
FlexUnit4采用类似Java注解的方式经行单元测试,这是非常好用也是非常强大的功能!~
编写Suite类:
package cn.vicky.test { import cn.vicky.test.mxml.TestMXMLComponentUse; [Suite] [RunWith("org.flexunit.runners.Suite")] public class MyTestSuite { public function MyTestSuite() { } public var testAssertCase:TestAssertCase; } }
用于显示测试结果的MXML:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:flexUnitUIRunner="http://www.adobe.com/2009/flexUnitUIRunner" layout="absolute" creationComplete="initTest(event)" > <mx:Script> <!--[CDATA[ import cn.vicky.test.MyTestSuite; import org.flexunit.listeners.UIListener; import org.flexunit.runner.FlexUnitCore; import cn.vicky.test.ignore.TestIgnoreCase; import cn.vicky.test.assert.TestAssertCase; import mx.events.FlexEvent; private var core:FlexUnitCore; private function initTest(e:FlexEvent):void{ trace(e); core = new FlexUnitCore; core.addListener(new UIListener(uiListener)); core.run(MyTestSuite); } ]]--> </mx:Script> <flexUnitUIRunner:TestRunnerBase id="uiListener" width="100%" height="100%"/> </mx:Application>
使用FlexUnit4以前版本的测试方案如下:
package com.mystorygame.sgs.util { import com.mystorygame.sgs.io.PDSByteArray; import flash.utils.ByteArray; import flexunit.framework.TestCase; public class PDSMessageObjectTest extends TestCase { private var testMessageObj:PDSMessageObject; public function PDSMessageObjectTest(methodName:String=null) { super(methodName); } public function test_adding_removing_boolean_property():void { test_generic_adding_removing_property("testBoolean", true, PDSMessageObject.BOOLEAN_TYPE); } } }
这种测试的方式就好别junt3.需要extends TestCase
用于显示测试结果的页面:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" xmlns:flexunit="flexunit.flexui.*" creationComplete="runAllTests()"> <mx:Script> <!--[CDATA[ import com.mystorygame.sgs.util.PDSMessageObjectTest; import flexunit.framework.TestSuite; private function runAllTests():void { testRunner.test = createSuite(); testRunner.startTest(); } private function createSuite():TestSuite { var ts:TestSuite = new TestSuite(); ts.addTestSuite(PDSMessageObjectTest); return ts; } ]]--> </mx:Script> <flexunit:TestRunnerBase id="testRunner" width="100%" height="100%" /> </mx:Application>