关于FLEX 3.0的单元测试

1.        首先下载所需的包,地址: http://tomorrow009.iteye.com/admin/blogs/579249 本文采用的是 4.0.0RC1.0 版本。

2.        将下载包解压后是一个名为 FlexUnit4TurnkeyRC_1.0 FLEX 工程,你可以直接导入到 FLEX BUIDER 作为参考示例。

3.        FLEX BUIDER 中建立一个项目,项目结构如下

 最终截图:如附件图1

建立项目时需要将我们要用到的单元测试类包引入,类包路径为 FlexUnit4TurnkeyRC_1.0/ libs/ FlexUnit4.swc FlexUnit4TurnkeyRC_1.0/ libs FlexUnit4UIListener.swc

最终截图:如附件图2

4.          bl.as 是将要进行单元测试的目标类, testcase.as bl.as 类测试用例类, suite.as 则可以将 testcase 作为资源引入,当进行大规模的整体测试时,此种做法的优势显而易见。

5.        bl.as 代码如下:

package bl

{

    public class bl

    {

       public function bl()

       {

       }

 

     public function add(a:Number,b:Number):Number{

          

             return a+b;  

     }

       

    public function dec(a:Number,b:Number):Number{

    return a-b;

 

    }

     

    public function isTrue(a:Boolean):Boolean{

    return a;

    }

 

     public function isFalse(a:Boolean):Boolean{

    return a;

     

     

    }

}

6.  testcase.as 代码如下  

package testcase

{

    import bl.bl;

    import org.flexunit.asserts.assertEquals;

    import org.flexunit.asserts.assertFalse;

    import org.flexunit.asserts.assertTrue;

   

    public class testcase

    {

       private static var b:bl;

       public function testcase()

       {

       }

       [BeforeClass]

      

       public static function runBeforeClass(): void {

         trace ( "runBeforeClass" );

         b= new bl;

       }

 

       [AfterClass]

      

       public static function renAfterClass(): void {

         trace ( "runAfterClass" );

       }

      

       [Test]

      

       public function aa(): void {

             assertEquals(3,b.add(1,2));

       }

      

       [Test]

      

       public function bb(): void {

             assertEquals(3,b.dec(6,3));

       }

       [Test]

      

       public function cc(): void {

             assertFalse(b.isFalse( false ));

       }

 

       [Test]

       public function dd(): void {

            assertTrue(b.isTrue( true ));

        

       }

      

    }

}

这里用到的元标签 [BeforeClass] [AfterClass] [Test]

[BeforeClass] 的含义就是实例化此类之前先执行该标签指定的方法(该标签的第一个方法),所以我们需要将该标签指定的方法声明为 static.

[AfterClass] 的含义是当实例化此类之后,并且执行完此类的所有声明为 [Test] 的方法后,执行该标签制定的方法,所有此标签指定的方法也应该声明为 static.

 

所以该类的执行顺序为:

 

runBeforeClass()->testcase()->aa()->bb()->cc()->dd()->runBeforeClass();

 

testcase() 为构造函数

 

诸如 assertEquals() 等函数没有什么可讲的,如 junit 没什么不同。

 

7.  suite.as 代码如下

 

package suite

{

    import testcase.testcase;

    [Suite]

    [RunWith( "org.flexunit.runners.Suite" )]

    public class suite

    {

       public var _testcase:testcase;

      

       public function suite()

       {

       }

    }

}

 

标签是告诉编译器如何编译,不作为最终编译代码。

[Suite]

[RunWith( "org.flexunit.runners.Suite" )] 含义为是说这里为单元测试的代理站点。

 

这里将 testcase 测试用例类作为属性引入,如果你有多个测试用例,那你就可以声明多个属性。

 

8.  FlexDemoApp.mxml 代码

 

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx=" http://www.adobe.com/2006/mxml " layout=" absolute " xmlns:flexUnitUIRunner=" http://www.adobe.com/2009/flexUnitUIRunner " creationComplete="init()" >

    <mx:Script>

       <![CDATA[

           import mx.controls.List;

           import suite.suite;

 

           import org.flexunit.listeners.UIListener;

           import org.flexunit.runner.FlexUnitCore;

 

           public var core:FlexUnitCore;

           public function init(): void {  

           core= new FlexUnitCore();

           core.addListener( new UIListener(testrunbase));

           core.run(suite);

            

       ]]>

    </mx:Script>

<flexUnitUIRunner:TestRunnerBase width=" 100% " height=" 100% " id=" testrunbase " />  

</mx:Application>

FlexUnit 为我们提供的单元测试的视图组件(当然你可以也可以自己写视图组件,视情况而定),当组件加载完毕后,我们执行了 init() 方法,这个方法的作用是 首先创建一个视图组件监听器,即 new UIListener(testrunbase) ,将该组件监听器做为参数传给 core.addListener() 方法,然后运行站点,当然你有多个站点,像如下运行

  Core.run(suite1,suite2,...,suiteN);

 

 

 

最终截图:如附件图3

你可能感兴趣的:(单元测试,JUnit,Flex,Adobe)