1 / 13
文档名称:

TDD in PHP.doc

格式:doc   大小:172KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

TDD in PHP.doc

上传人:文库旗舰店 2018/6/12 文件大小:172 KB

下载得到文件列表

TDD in PHP.doc

相关文档

文档介绍

文档介绍:TDD in PHP (知识篇)
作者: Binzy Wu
普通程序员
本文完成于2004年平安夜,祝大家幸福快乐
可通过Email: binzywu@, 或者主页与Binzy交流看法
概述
什么是TDD
准备工作
了解PHPUnit2
PHPUnit2扩展
小结
概述
测试驱动开发, 这种开发方式广为流传, 并且有相当数量的开发人员成为使用者. 本文简单介绍了如何在PHP中进行测试驱动开发, 包括一次真实的开发过程. 由于篇幅有限, 本文内容较为简要, 同时随着PHP&More即将推出的咨询服务内容中, 将包含更多的关于在PHP中实施测试驱动开发的介绍.
什么是TDD
测试驱动开发, Test-Driven Development,TDD,是一种开发方式:
思考要做什么。
思考如何测试。
编写一个小测试。设想所需的API。
编写使测试失败的代码。
运行并观察失败的测试。现在你了解你的测试会被执行。
编写正好的代码使测试通过(还有你之前的那些测试)。
运行并观察所有测试通过。如果测试没有通过,则意味着你犯了某些错误,马上对你刚才编写的代码进行修复。
如果你有任何重复的逻辑或者无意义的代码,那么赶快通过重构来移除重复和增加代码意义,同时减小耦合增强内聚。
再次运行测试,你应该仍旧通过测试。如果测试失败了,那么意味着你在重构的时候犯了些小错误。马上修复它,然后再运行测试。
重复以上的步骤直到你找不到任何测试可以驱动你去编写新代码。
从另外的角度说,测试驱动开发有以下几个特征:
一套详尽的程序员测试集
没有测试就没有产品代码
测试优先
测试决定产品代码

测试驱动开发提倡的是一种三思而后行的开发方法。从思考我该怎么设计换成思考我该怎么测试来进行Design。采用测试优先的做法,开发人员可以迅速发现他们的想法是否实际可行。同时也为想法的建模,实现,修改等提供了质量上的保证和可测试性。
现在的TDD更多的借助于单元测试工具xUnit家族,由编写单元测试对对象的特征和状态进行测试来进行。
准备工作
所谓的准备工作就是找一个单元测试工具,换句话说找个xUnit家族的PHP成员。目前PHP的Unit Test的实现有Pear中由Sebastian Bergman维护的PHPUnit和PHPUnit2,还有SimpleTest。关于SimpleTest的介绍可以见PHP&More第2期中的文章《SimpleTest》。其中SimpleTest更多的可以看作Unit Test上的有益补充,不仅仅包括了
Server Stub, Mock Object,Web Test,Form Test,甚至还包括部分Mock和报表及用户验证功能。在本文中,侧重的是让不了解TDD的PHP开发者了解TDD思想而非介绍TDD测试中的技巧,同时由于使用PHP5,并且相对于PHPUnit,PHPUnit2更好得实现了JUnit的Port,故本文采用的工具将是PHPUnit2。
安装PHPUnit2。由于PHPUnit2是Pear的一部分,所以仅仅需要实用pear install PHPUnit2命令来进行安装即可。

了解PHPUnit2
系统概览
PHPUnit2的整体结构如下:

上图是PHPUnit2的基本结构,与JUnit几乎无异。下面简单介绍一下这几个类。
PHPUnit2_Framework_Test 这是所有类型的测试所必需实现的接口。
PHPUnit2_Framework_TestCase 最简单的Test类型,基本上所有的测试都是extend这个抽象类。
PHPUnit2_Framework_TestSuite 测试套件,意在集中测试。
PHPUnit2_Framework_Assert PHPUnit2_Framework_TestCase的超类,提供编写测试所要用到的assert方法。
PHPUnit2_Framework_TestResult 该类收集测试运行的结果。
PHPUnit2_Framework_TestListener 用于实现对测试执行跟踪的接口。
PHPUnit2_Framework_BaseTestRunner 所有TestRunner的抽象基类。
Assert
Assert作为TestCase的基类,包含了所有用于做出断言(Assert)的方法。下面是对一些方法的简单罗列。
fail
fail是最简单的方法,会立即导致测试失败
assertEquals
预期和结果是否相等
assertTrue
结果是否为真
assertFalse
结果是否为假
assertContains