当前位置: 首页 > 工具软件 > FlexUnit > 使用案例 >

使用FLASH BUILDER 4和FLEXUNIT进行测试驱动开发

常乐
2023-12-01

https://www.adobe.com/devnet/flex/articles/flashbuilder4_tdd.html

要求

必备知识
所需产品 示例文件
建议您构建Flex应用程序的经验。
Flash Builder (下载试用版) flashbuilder_tdd_source.zip (6317 KB)

用户级别
所有

在本文中,我将介绍使用Flash Builder 4和FlexUnit开始测试驱动开发(TDD)的一些基础知识。

随着Flash应用程序变得更加动态和复杂,它们变得更难以维护和扩展,尤其是在整个开发过程中业务需求发生变化时。这些挑战非常重要,它们在所有类型的开发中都很常见,包括移动,Web和桌面应用程序。

考虑一种场景,您需要对大型应用程序进行更改以满足新的业务需求。您如何知道您所做的小改动是否打破了应用程序的其他部分?如何确保代码是防弹的,特别是如果您不是编写代码的人?

对于软件工程师来说,这个问题既不是新问题,也不局限于特定平台。Java和ASP开发人员面临着同样的问题,并且发现测试驱动开发(TDD)是一种用于创建易于维护的应用程序的有用技术。

Flash已经从一个小型动画工具中走了很长一段路。Adobe Flash Platform现在包含符合ECMAScript的编程语言以及构建大型动态应用程序所必需的其他编程语言的通用方法。事实上,Adobe和许多其他公司已经发现TDD解决了开发人员每天在开发周期中面临的许多挑战。

我注意到虽然许多开发人员都听说过TDD,但他们不愿意使用TDD,因为他们不熟悉TDD,并担心使用TDD会增加开发时间。

根据我的个人经验,我发现正确使用TDD不会增加开发时间,因为它适用于适合的项目。实际上,TDD可以缩短开发时间并简化应用程序维护。我还发现我可以在现有应用程序上使用FlexUnit,并以某种方式将TDD方法应用于任何框架。

值得注意的是,即使有单独的质量保证(QA)部门执行正式测试,TDD也适用。TDD帮助开发人员提供更加可靠的代码,使QA能够专注于其他任务,包括测试用户界面和创建他们需要测试的用例。

测试驱动开发概述
那么什么是TDD呢?测试驱动开发是一种软件开发技术,程序员编写失败的测试,在编写实际代码之前定义功能。

在极限编程团队中,团队负责开发具有不断变化的需求的动态项目,以及包含TDD的开发周期,用于在代码本身之前编写测试。请注意,TDD不是完整的开发周期; 它只是极限编程(XP)开发范例的一部分。在编写代码之前准备测试有助于开发团队以小步骤展示他们的工作,而不是让客户或其他利益相关者等待完整的结果。

以小增量移动还可以更轻松地满足不断变化的需求,并有助于确保您的代码能够完成所需的操作,仅此而已。值得一提的是,TDD技术的重点是生成代码而不是创建测试平台。测试能力是一个额外的好处。

TDD基于这样的想法,即您构建的任何内容都应该进行测试,如果您无法测试它,您应该三思而后行,是否真的要构建它。

使用FlexUnit 4应用TDD技术
文件
图1.测试驱动开发周期

TDD过程包括六个简单步骤(参见图1):

添加测试 -第一步是了解业务需求,考虑所有可能的方案,并根据这些方案添加测试。如果要求不够清楚,您可以立即提出问题,而不是在软件完成时提出问题,并且需要更多的努力来进行更改。
写入失败的单元测试 -此阶段确保测试单元本身正常工作。它不会通过,因为您还没有编写任何代码。
编写代码 -在此阶段,您将以最简单,最有效的方式编写代码,以确保测试通过。无需包含任何设计模式,考虑应用程序的其余部分或清理代码。您的目标只是通过测试。
测试通过 -一旦您编写了所有代码和测试通过,您就会知道您的测试符合所有业务要求,您可以与客户或团队的其他成员共享工作。
重构 -现在测试已经完成,并且您确认它符合业务要求,您可以通过替换任何临时参数,添加设计模式,删除重复代码以及创建类来高效地完成工作来确保代码已准备好进行生产。 。理想情况下,一旦重构阶段完成,代码将经过代码审查,这对于确保代码处于良好状态并符合公司的编码标准至关重要。在重构和代码审查之后,应该再次运行测试以确保过程中没有任何内容被破坏。
重复 -单元测试完成后,您可以转到下一个单元测试并与客户或团队的其他成员共享代码。

使用FlexUnit测试Flex和ActionScript项目
FlexUnit是Flex和ActionScript 3.0应用程序和库的单元测试框架。它提供类似于JUnit的功能,JUnit是一个Java单元测试框架。FlexUnit用于许多内部Adobe项目,并且是开源的。

Flash Builder 4提供了集成的FlexUnit支持,允许您自动创建测试单元的脚手架,节省您的时间,无需一遍又一遍地创建相同的类,并确保使用最佳实践。

FlexUnit有两个版本:FlexUnit 0.9(也称为FlexUnit 1)和FlexUnit 4(也称为FlexUnit 4)。本文介绍FlexUnit 4。

要在以前版本的Flex Builder中使用FlexUnit,您必须下载FlexUnit SWC文件并将其包含在项目中。创建测试后,Flash Builder 4会自动包含五个SWC。以下SWC将添加到项目的Referenced Libraries下:

flexunit_0.9.swc
hamcrest-1.0.2.swc
的FlexUnit核-FLEX-4.0.0.2-sdk3.5.0.12783.swc
flexunitextended.swc
FlexUnitTestRunner_rb.swc
这些SWC包括FlexUnit 0.9,FlexUnit 4,测试运行器和其他库的所有API。SWC作为Flex 4 SDK的一部分进行维护,因此无需下载FlexUnit或手动添加它们。添加测试后,它们将自动添加。

在Flash Builder 4中创建测试套件和测试用例
在本节中,您将使用Flex Builder 4和FlexUnit 4来创建测试套件和测试用例。

创建一个测试套件类
为了说明如何在Flash Builder中使用FlexUnit,我将使用一个计算数字的简单应用程序。请按照以下步骤创建应用程序并添加测试套件:

选择“文件”>“新建”>“Flex项目”以创建项目。
对于“项目名称”,键入CalculatorApplication。
单击完成。
要创建测试套件,请选择File> New> Test Suite Class(参见图2)。
文件
图2.在Flash Builder 4中创建新的Test Suite类

在“新建测试套件类”对话框中,将类命名为CalculatorTestSuite。
选择New FlexUnit 4 Test(参见图3)。
单击完成。
文件
图3.创建名为CalculatorTestSuite的新Test Suite类

测试套件是测试的组合。它运行一组测试用例。在开发期间,您可以创建一个打包到测试套件中的测试集合,一旦完成,您可以运行测试套件以确保您的代码在更改后仍能正常工作。

Flash Builder 4在flexUnitTests文件夹下添加了以下类:

package flexUnitTests
{
[Suite]
[RunWith(“org.flexunit.runners.Suite”)]
public class CalculatorTestSuite
{
}
}
该Suite元数据标签指示类是一套。该RunWith标签指示的测试运行器来执行它后面使用一个特定的类中的测试。FlexUnit 4是一组跑步者,可以运行一整套测试。您可以定义每个运行器以实现特定接口。例如,您可以指定一个不同的类来运行测试,而不是FlexUnit 4中内置的默认运行器。

添加测试用例类
创建Test Case类:

选择文件>新建>测试用例类。
选择New FlexUnit 4 Test。
键入flexUnitTests作为包。
键入CalculatorLogicTester作为名称。
点击下一步。
文件
图4.创建一个新的Test Case类

注意:在FlexUnit 1中,您可以选择生成setUp()和tearDown()存根。当测试用例开始(setUp)和结束(tearDown)时,会自动调用这些存根。它们可用于在测试开始之前设置信息和事件,并清除信息和事件以确保您没有任何内存泄漏。在FlexUnit 4中,您可以定义使用元数据标签,这些方法[Before]和[After],因为您将在本文后面看到。

写一个失败的单元测试
您已准备好开始编写测试代码。在FlexUnit 1中,您创建的每个方法都必须以“test”开头,以使测试运行器能够识别该方法。结果,方法名称更改为testAdditionMethod。在FlexUnit 4中,方法名称不需要以“test”开头; 相反,它们被[test]元数据识别,因此可以随意重构方法名称。这是生成的代码:

package flexUnitTests
{
public class CalculatorLogicTester
{
[Before]
public function setUp():void
{
}

      [After]
      public function tearDown():void
      {
      }

      [BeforeClass]
      public static function setUpBeforeClass():void
      {
      }

      [AfterClass]
      public static function tearDownAfterClass():void
      {
      }


 }

}
我们现在可以编写第一种方法了。我们正在创建一个计算器,因此我们需要创建计算器帮助实用程序将用于执行所有计算的方法,我们将从add方法开始。从[Test]元数据开始创建测试方法,而不是放置代码。我创建的代码在我实现该方法之前不会通过测试,见下文:

[Test]
public function testAdditionMethod():void
{
Assert.fail(“Test method not yet implemented”);
}
最后,请记住将要测试的测试用例添加到CalculatorTestSuite测试套件中。将以下粗体添加到CalculatorTestSuite.as:

package flexUnitTests
{
[Suite]
[RunWith(“org.flexunit.runners.Suite”)]
public class CalculatorTestSuite
{
public var calculatorLogic:CalculatorLogicTester;
}
}
建立项目。要运行应用程序,请按照下列步骤操作:

单击编译图标并选择FlexUnit Tests(参见图6)或选择Run> Run> FlexUnit Tests。
文件
图6.运行FlexUnit测试

2.在Run FlexUnit Tests对话框中,选择测试用例(参见图7)

3.单击“确定”。

文件
图7.选择所有可用的TestCases和TestSuite

4.应用程序完成后,在浏览器中查看测试状态结果。(见图8)。

文件
图8.浏览器中的FlexUnit测试结果

5.关闭浏览器窗口。

6.在FlexUnit Results视图中检查测试结果(参见图9)。

如您所见,测试失败,因为您有以下代码CalculatorLogicTester.as:

Assert.fail(“Test method Not yet implemented”);
文件
图9. FlexUnit Results视图

更新testAdditionMethod存根以生成失败结果:

var result:Number = CalculatorLogicHelper.additionMethod(5,5);
Assert.assertEquals(result,10);
我们在实际代码之前编写测试。在我们的例子中,我们发现我们有一个静态方法,它将计算添加两个数字,而不是我们应该能够断言以确保执行加法计算。保存文档后,您会收到编译时错误。请参见图11.这是一件好事,因为编译器会为您提供下一步需要执行的操作的说明,即创建帮助程序类和方法。

文件
图10.显示失败方法的FlexUnit Results视图

引擎盖下发生了什么?
在应用程序文件夹结构下,您可以找到文件CalculatorLogicTester.as,CalculatorTestSuite.as和FlexUnitCompilerApplication.mxml(参见图11)。

文件
图11. CalculatorApplication文件夹结构

看一下FlexUnitApplication.mxml:

 类似资料: