Fluint——针对Flex的单元测试工具

作者 Moxie Zhang 译者 宋玮

随着富Internet应用(RIA)技术的不断流行,出现了更多支持RIA开发的工具。Flex单元测试工具Fluint就是其中之一。

InfoQ 采访了Fluint的开发者和Flex的架构师——Michael Labriala,以了解在Flex开发过程中使用Fluint作为单元测试解决方案的更多信息。他解释说:

对于Flex单元和集成测试,“Fluint”非常简洁。它是为编写Flex2或Flex3应用的开发者提供的测试框架,无论这些应用是通过Adobe Flash Player在浏览器中部署的,还是通过Adobe AIR在桌面上部署的。

Fluint最初是作为Digital Primates的内部工具开发的,用以测试一些非常大的项目。随着Flex社区对其需求的不断增长,Digital Primates决定把其发布为一个开源项目。尽管针对Flex有其他的单元测试解决方案,按照Labriala的说法,Fluint仍填补了重要空白。他解释说:

有其他几个项目也是关于Flex单元测试的。可是,Fluint是到目前为止唯一一个涵盖单元测试和集成测试的项目。这很重要,原因如下:Flex是一个组件框架,在你装配一个应用时,你是在Adobe组件和自己制作的组件基础上进行的。问题是从测试意义上讲,一个组件并没有提供一个好的‘单元’。组件内部非常复杂,而且有些方面天生就是异步的。
虽然你可以给你需要单元测试的应用程序和组件增加方法,但是你很可能会发现把几个已有组件整合为一些新的组件是应用程序中最容易出错的地方。已有框架不能很好地处理异步操作。因此,对由几个异步组件整合而成的组件所做的测试工作往往并不理想。

被问及可能使用Fluint的典型案例时,Labriala回答道:

这个例子有点老套,但是它很好地说明了Fluint的强大之处。设想一个包含用户名域、密码域及登录按钮的简单登录表单。你可能还有两个客户端校验来确保用户名和密码不要少于一位字符或太长,或者不包含任何无效字符。如果它们是合法的,则发出一个带有用户名和密码‘login’事件,这样你的应用程序的另一部分就可以执行登录逻辑了。如果校验失败,在屏幕上就会显示一个错误消息。
任何Flex初学者都应该能够编写这样的组件,但是目前除了Fluint没有其它工具能够完全测试这个组件。

为了说明一些独特特性,Labriala给出了用Fluint针对上述例子编写简单测试的步骤:

  • 把组件增加到显示列表以进行测试——这一步启动了组件的内部生命周期,以便对其方法进行真正测试。这里也是一半测试框架做不到的地方,因为它们实际上不允许把UIComponent增加到显示列表进行测试。
  • 等待数据提交以进行事件测试——大部分现有测试框架没有能力等候多个异步事件。
  • 确保组件传播一个‘login’事件并验证用户名和密码域——这里是大多数测试框架无法满足的需求。有些框架只是简单的获取屏幕快照并对其作比较,但是当结果是事件时这帮不上任何忙。事件不会显示在屏幕上以供比较。尽管不同的框架用于不同的目的,但这也是功能测试工具无法检测的。功能测试工具通常只是记录你的动作并让你在特定域录入数据,但是它们缺乏捕获并审查结果事件的能力。

关于Fluint的开发,Labriala解释道:

Fluint包含了一个ActionScript类库,其含有测试框架和相关的类。还有一个用MXML写的例子测试运行器。这只是你在Web浏览器中编写并运行测试所需的两个部分。然而,如果你对自动化环境感兴趣,Fluint也提供了一个为Adobe AIR而写的测试运行器。它将运行已编译成单独模块的测试,并输出成XML文件。该XML文件很快就能与JUnit兼容,这样已有报表工具就可以为 Fluint所用了。最后,有一个ANT任务可用,以便更容易地执行AIR测试运行器。

谈到未来的增强,Labrialal说:

社区提出了许多非常好的增强意见,可能会在Fluint下一版本中得以体现。现在我们正在提升其性能,通过移除测试运行器中的一些低效代码,在对大项目进行测试的时候,其速度可以提高三倍以上。不管怎样,我们都在积极地为项目寻找贡献者。Digital Primates到目前为止一直是主要的推动力量,但是我们希望随着我们的不断前进,这个项目最终变为社区所有。

查看英文原文:Fluint Unit Test Tool for Flex

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: