24.3.创建FlexUnit测试用例

24.3.1. 问题
我需要创建FlexUnit TestCase类实例测试代码。
24.3.2. 解决办法
创建TestCase子类,包含一个或多个以test开头的方法。
24.3.3. 讨论
当创建继承自TestCase的ActionScript类,一般的命名方法是在类名后面添加Test作为后缀。

例如,如果被测试类叫RegExp,则TestCase类将被命名为RegExpTest。另外一般把TestCase类和被测试类放在同一个包中。如一个类叫做mx.core.UITextFormat,那TestCase类叫mx.core.UITextFormatTest.

举例,创建一个继承自TestCase的叫RegExpTest的ActionScript类,如下代码:
+展开
-ActionScript
package
{
import flexunit.framework.TestCase;
public class RegExpTest extends TestCase
{}
}

FlexUnit框架使用反射确定TestCase的哪些方法可以运行。函数名称以test开头的指示该函数将包含要运行的代码,例如这节的例子,添加方法testRegExp到RegExpTest:
+展开
-ActionScript
public function testRegExp():void
{}

下一步就是生成一个或多个断言(assertions)。一个断言就是以编程方式确认事实语句。一般的做法是通过一些操作将期望值与实际值相比较,返回结果。FlexUnit包含一系列断言类型用于不同的测试情形。常见的断言和函数如下:

assertEquals
比较==.

assertTrue
检测条件是否为true.

assertNull
检测条件是否为null.

assertStrictlyEquals
比较===.

FlexUnit还提供各种方便的断言用于测试相反的条件,例如assertFalse和assertNotNull. (具体请看FlexUnit文档中有关断言的完整列表)

每个断言函数都可接受可选的字符串作为第一个参数。如果断言失败时,该字符串将被作为默认的"expected X but was Y" 信息的前缀。编写断言时,请注意如果一个断言失败,剩下的的测试方法将不会被执行。

TestCase继承自Assert,它定义了所有的断言函数。这允许TestCase子类可直接调用断言函数。

下面的代码演示各种断言方法,这些方法应该被添加到testRegExp函数中:
+展开
-ActionScript
var regExp:RegExp = new RegExp("a""i");
assertFalse(regExp.test("b"));
assertFalse("regExp doesn't match", regExp.test("b"));
assertNull(regExp.exec("b"));
assertNull("regExp doesn't match", regExp.exec("b"));
assertNotNull(regExp.exec("Apple"));
assertNotNull("regExp matches", regExp.exec("Apple"));
assertTrue(regExp.exec("Apple") is Array);
assertTrue("regExp exec returned an Array",
regExp.exec("Apple") is Array);
assertEquals("A", regExp.exec("Apple")[0]);
assertEquals("regExp matched A in Apple""A",
regExp.exec("Apple")[0]);
assertStrictlyEquals(regExp, regExp);
assertStrictlyEquals("regExp object identity", regExp, regExp);

你可以在TestCase中添加新的测试方法测试其他逻辑。习惯我们把每个测试方法集中测试特定的操作或任务。例如,当测试create, retrieve, update, 和delete操作时,每个操作都对应到它自己的测试方法,如testCreate, testRetrieve等等。这种方式中,如果这些断言失败,将会报告多个故障,这将帮助你快速诊断问题。

请注意,TestCase中的测试方法的执行顺序是随机的。每个测试方法创建它自己的数据,和其他已运行的测试无联系。下面是完整的ActionScript文件:
+展开
-ActionScript
package
{
import flexunit.framework.TestCase;
public class RegExpTest extends TestCase
{
public function testRegExp():void
{
var regExp:RegExp = new RegExp("a""i");
assertFalse(regExp.test("b"));
assertFalse("regExp doesn't match", regExp.test("b"));
assertNull(regExp.exec("b"));
assertNull("regExp doesn't match", regExp.exec("b"));
assertNotNull(regExp.exec("Apple"));
assertNotNull("regExp matches", regExp.exec("Apple"));
assertTrue(regExp.exec("Apple") is Array);
assertTrue("regExp exec returned an Array",
regExp.exec("Apple") is Array);
assertEquals("A", regExp.exec("Apple")[0]);
assertEquals("regExp matched A in Apple""A",
regExp.exec("Apple")[0]);
assertStrictlyEquals(regExp, regExp);
assertStrictlyEquals(""regExp object identity", regExp, regExp);
}
}
}

最后一步就是添加新创建的TestCase到TestSuite,这放在下一节讲解。

加支付宝好友偷能量挖...


评论(0)网络
阅读(94)喜欢(0)flash/flex/fcs/AIR