FlexUnit单元测试(第二章FlexUnit基本应用)

明白了测试的概念后,现在就介绍FlexUnit单元测试吧。FlexUnit可以说是Junit的一个复制,因为它们具有太多的相似性,不过说白了,其实所有的单元测试都是一个样,主要的方法就是通过输入来比较输出的结果是否正确。虽说原理是这么简单,但是一个好的单元测试框架,可以为编程人员带来很好的方便,在FlexUnit中,当然也有一个很有的框架。要使用FlexUnit,先须先下载FlexUnit.swc,这是一个集成的单元测试包,下载后导入即可使用。请先看看一个简单的例子:

       public class MyCircle

       {

              private var _radiusX:int;

              private var _radiusY:int;

              private var _r:int;

              private var _length:Number;

              private var _area:Number;

              public function MyCircle() {

                     this._r = 0;

                     this._radiusX = 0;  

                     this._radiusY = 0;

                     this._length = 0;

                     this._area = 0;

              }

              public function get radiusX():int { return _radiusX; }

              public function set radiusX(value:int):void {

                     _radiusX = value;

              }

              public function get r():int { return _r; }

              public function set r(value:int):void {

                     _r = value;

              }

              public function get radiusY():int { return _radiusY; }

              public function set radiusY(value:int):void {

                     _radiusY = value;

              }

              public function get length():Number {

                     _length = 2 * _r * Math.PI;

                     _length = Math.round(_length);

                     return _length;

              }

              public function get area():Number {

                     _area = Math.PI * _r * _r;

                     return _area;

              }

       }

我们有一个待测试的类MyCircle,现在我们要测试两个函数:get length()(周长)、get area()(面积)。为了测试,我们编写了如下的测试类:

import flexunit.framework.Assert;

       import flexunit.framework.TestCase;

       public class MyCircleTest extends TestCase

       {

             

              public function MyCircleTest(methodName:String) {

                     super(methodName);

              }

             

              public function testLength():void{

                     var myCircle:MyCircle = new MyCircle();

                     myCircle.r = 50;

                     var result:Number = myCircle.length;

                     Assert.assertEquals(result,Math.round(Math.PI * 100));

              }

             

              public function testArea():void{

                     var myCircle:MyCircle = new MyCircle();

                     myCircle.r = 50;

                     var result:Number = myCircle.area;

                     Assert.assertEquals(result,50*50*Math.PI+1);

              }

       }

       MyCircleTest类是TestCase的一个子类,一般的情况下,我们都要继承TestCase这个类,TestCase运行多个测试方法的装置,有一个methodName的属性,表示用来测试的方法名, textLength()、textArea()分别的测试MyCirclelengtharea的方法。方法里,我们用到了Assert类,Assert可以说是一个用来判断结果的测试类,它提供了很多方法,如:

assertEquals(),如何参数相等就运行正确,不等就会抛出一个错误

assertNull( ) >判断参数是否为Null;

assertUndefined( ) >判断参数是否未定义;

在一切都建立好后,再编写mxml

<?xml version="1.0"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"

creationComplete="init()"

xmlns:flexui="flexunit.flexui.*"

>

       <mx:Script>

              <![CDATA[

              import flexunit.framework.TestSuite;

              import flexunit.flexui.TestRunnerBase ;

              private function init():void

              {

            var suite:TestSuite = new TestSuite();

            suite.addTest(new MyCircleTest("testLength"));

                     suite.addTest(new MyCircleTest("testArea"));

            testRunner.test = suite;

            testRunner.startTest();

              }

              ]]>

       </mx:Script>

       <flexui:TestRunnerBase id="testRunner" width="100%" height="100%" />

</mx:Application>

       在这里,我们定义了一个变量suite,它的类型为TestSuiteTestSuite是一个装载测试的容器,也就是说,我们的要把我们的测试类分别加到这个容器上,如:

       suite.addTest( new MyCircleTest( "testLength" ) );

suite.addTest(new MyCircleTest("testArea"));

new MyCircleest(“testLength”);语句中,我们那函数testLength()的方法名作为参数,那么在TestCase里,就把methodName属性赋值为”testLength”,那么就表明了在这个TestCase对象里,我们要调用的测试方法是testLength( )

之后,我们新建一个TestRunnerBase类的实例testRunnerTestRunnerBasePanel的子类,那么它就是一个可显示的组件,它的test属性我们附值为suite,接着我们就可以开始测试了,也就调用testRunnerstartTest()函数。

上图就是我们那见到的运行结果,如果测试全面通过,即图的右方会出现“√”的符号,如果测试不通过,就会出现如图所示:

图右方的文字写出了错误的详细说明,通过它显示的数据,我们可以很清晰的看到那个类的那个方法出错,从而友好地帮助编程人员测试代码。

posted @ 2010-04-13 08:18  fxair  阅读(289)  评论(0编辑  收藏  举报