利用flexunit进行单元测试一(同步测试)
时间:2009-07-03 来源:panzt
先扯两句:
单元测试的重要性我就不扯了,现在都是分模块开发,如何保证你交给队友的模块是正确的,无bug的,对于项目整体开发效率提升来说尤为重要。
PS之前搞过junit或者testng的java程序员应该很容易上手这篇教程,只需侧重于异步测试部分的讲解即可
准备工作
下载flexunit类包,下载地址http://download.macromedia.com/pub/opensource/flexunit/flexunit0_9.zip
flexunit的”官方”站点位于
http://opensource.adobe.com/wiki/display/flexunit/FlexUnit ,你可以看到更为详细的英文development document
将下载的类包添加到项目中(*.swc)
用过junit等java单元测试工具的朋友会说,在eclipse下进行as3的单元测试,不需要安装什么plugins吗?
其实flexunit的开发人员就地取材,利用flex做了测试报告界面。
swc加载进project后,你会在你design界面的custom components里看到一些新组建,
这就是flexunit提供给我们的报告界面。
new一个application。将TestRunnerBase拖入
为这个mxml设置一个id = “testRunner”
假设我们接下来要对以下这个类中的add方法进行单元测试
package com.momoko.project.util { public class MathUtil { public function add(a:Number,b:Number):Number { return a+b; } } }
接下去我们写TestCase,我们可以重写setUp()和tearDown()方法来初始化和回收一些对象,注意testCase的构造函数必须这样实现。 另外你需要测试的function必须是无参的(flexunit和junit类似,不像testng这么灵活,如果你想要传递参数其实也是可以办到的,不过需要hack源码了), 写下断言后,这个testCase就ok了
public class MathUtilTest extends TestCase { private var mathUtil:MathUtil; public function MathUtilTest(methodName:String=null) { super(methodName); } override public function setUp():void { mathUtil = new MathUtil(); super.setUp(); } public function testAdd():void { var a:Number = 1; var b:Number = 2; var sum:Number = a+b; Assert.assertEquals(sum,mathUtil.add(a,b)); } override public function tearDown():void { mathUtil = null; super.tearDown(); } }
然后我们回到之前的mxml中,加入如下代码。
import com.momoko.project.util.test.MathUtilTest; import flexunit.framework.TestSuite; private var suite:TestSuite; //creationComplete="init()" private function init():void { testRunner.test = getSuite(); testRunner.startTest(); } private function getSuite():TestSuite { suite = new TestSuite(); suite.addTest(new MathUtilTest("testAdd")); return suite; }
run application后你就会看到测试结果了
如果断言失败则显示错误信息,别与查错