1
回答
FlexUnit 基本应用
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

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()函数。

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

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

文章转自:http://hi.baidu.com/s_addies/blog/item/6d76ea17aa80671e972b43d8.html

举报
鉴客
发帖于6年前 1回/742阅
顶部