单元测试工具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()函数。

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值