博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

流水孟春

以前使用的博客 webvista.cublog.cn
lib.cublog.cn
PHPUnit袖珍指南 (0-2章)

概述

聪明的Web开发人员会告诉你,越快找到代码的错误,你就能越快修正它,长期而言,项目成本越低。好了,能最有效的检测PHP代码中的错误的工具是PHPUnit,一个开发源代码的框架,它在你不在的时候,自动进行成套的单元测试。使用PHPUnit的好处是显而易见的:

l         减少用于测试代码的工作量

l         减少总体软件缺陷

l         增加对代码的信心

l         改善你和开发源代码的团队伙伴的关系

直到现在,这个流行工具唯一的问题是缺乏文档。为了解决这个问题,O’Reilly直接找到了源头,PHPUnit口袋书指南的作者,也是PHPUnit的创造者,Sebastian Bergmann,来解决这个问题。这本书把很多难以记忆的信息,语法,PHPUnit工作的原则,统一到一起。它也带来了只有技术创造者才能提供的洞察力和睿智忠告。而且,本书也谈到了敏捷方法和极限编程中关于测试的内容。

O’Reilly口袋书指南最近的系列中,这本快速参考书把所有的答案都带到了你的指尖。那些对测试PHP代码感兴趣的Web应用程序开发者,会觉得本书是一个无价的伴侣。

 

第一章 简介

很长时间里,我对“你什么时候会为PHPUnit写一个文档”这个问题的回答是:“你不需要PHPUnit文档,去读读JUnit文档或买一本Junit的书,试一试用PHPPHPUnit来重写JavaJunit的例子”。当我和O’Reilly德国办公室的Barbara WeissAlexandra Follenius这样说的时候,他们鼓励我想想是不是可以写一本书来作为PHPUnit的文档。

1.1 基本要求

本书的主题是PHPUnit,这是一个支持用PHP进行测试驱动开发的开放源代码框架。本书覆盖了PHPUnit 2.3,需要PHP5.1支持。当然,大部分例子在PHPUnit 2.02.2PHP5.0也都可以运行。本书的后半部分,“在PHP4中使用PHPUnit”一章中,覆盖了老式的,不再进一步积极发展的在PHP4中运行的PHPUnit

本书的读者需要对使用PHP5进行面向对象编程要很好的理解。建议德文读者读读我写的Professionelle Softwareentwicklung mit PHP 5一书,这是对使用PHP5进行面向对象编程的介绍。英文读者可以参考Andi Gutmans, Stig BakkenDerick Rethans合著的PHP 5 Power Programming

1.2 本书是自由发布的

本书可以在Creative Commons license版权公约下自由获得。访问http://www.phpunit.de/pocket_guide/你可以总是发现本书的最新版本。你根据自己的需要修改和重新发布。当然,相比你发布你自己的版本,我更推荐你发送反馈和更新给sb@sebastian-bergmann.de

1.3 本书的约定

下面是本书的一些书写约定:

斜体

表示新名词,URL,邮件地址,文件名,文件扩展名,路径名,目录和Unix应用程序

固定宽度字体

表示命令,选项,开关语句,变量,函数,类,名字空间,方法,模块,参数,值,对象,文件内容或命令输出。

固定宽度加重字体

表示需要读者逐字逐句输入的命令或文本内容。

固定宽度斜体

表示需要用读者自己的值替代的文本。

辅助信息

这是一个辅助信息,是建议或者普通注释。它包含了关于相关主题有用的辅助内容。

警告

这是一个提醒注意的警告或注释

1.4 如何联系我们

我们已经尽力测试和验证过本书的内容,但是你还是可能发现特性改变了,甚至有错误!

作为本书的读者,你可以通过发送反馈给我来帮助我们改进未来的版本。请告诉我们任何书中的错误,不精确,臭虫,误导、混淆语句或输入错误。

也请你让我们知道如果能让本书更有用。我们会慎重对待你的来信,并尽力在未来版本加以改进。你可以发信到如下地址:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

(800) 998-9938 (in the U.S. or Canada)

(707) 829-0515 (international/local)

(707) 829-0104 (fax)

 

如果想问技术问题,或对本书发表评论,可以发送到bookquestions@oreilly.com

PHPUnit口袋书指南的网站列出了例子,勘误表和未来的版本计划。你可以在如下网址找到它们:

http://www.oreilly.com/catalog/phpunitpg

想要更多本书或其他书籍更多信息,请访问O’Reilly的网站:

http://www.oreilly.com

 

1.5 鸣谢

我要感谢Kent BeckErich Gamma发明了Junit给了我发明PHPUnit的灵感,我更要谢谢Kent Beck写了Junit口袋书一书,这使我有了写本书的冲动。同时我要感Allison Randal, Alexandra FolleniusBarbara Weiss,是他们在O’Reilly负责本书。

我要感谢Andi Gutmans, Zeev SuraskiMarcus Börger,是他们开发了PHP5的核心Zend Engine 2。我还有谢谢Derick Rethans,他开发了PHP扩展功能Xdebug,使得PHPUnit的代码覆盖率功能成为可能。最后,我还有谢谢Michiel Rook,他写了PhingPHPUnit任务。

 

第二章 自动测试

最好的程序员也会犯错误。好程序员和差程序员的区别在于:好程序员能通过测试尽可能的发现错误。你越快测试错误,你就越快发现它们,发现和修正的成本就越低。这解释了为什么只在软件发布前才测试的做法为什么问题那么多。大多数错误根本就没有发现过,修正发现的错误是那么的高,以至于你不得不根据优先级来决定只修正那些错误,因为你根本就承受不起全部修正的费用。

相比你正在使用的方法,采用PHPUnit进行测试并不是一个全然不同的东西。它们只是方法不同。两者之间的不同在于,检查程序行为是否符合正确是通过一批可以自动测试的代码片断来进行的。这些代码片断叫做单元测试。

在这一部分,我们先基于打印的测试代码进行自动测试。假设我们要测试PHP的内建数组Array。需要测试之一是函数sizeof(),对任何新创建的数组,sizeof()函数应该返回 0。当我们加入一个新数组成员,sizeof()应该返回1。例1显示了我们想测试什么。

 

1. 测试数组和sizeof()

<?php
$fixture = Array( );
// $fixture应该为空。
 
$fixture[] = "element";
// $fixture应该包含一个数组成员。
?>

最简单的测试方法是在加入数组成员前后打印sizeof()的运算结果,如果返回01,说明Arraysizeof()运行正常。

 

2. 采用打印语句测试Arraysizeof()

<?php
$fixture = Array( );
print sizeof($fixture) . "\n";
 
$fixture[] = "element";
print sizeof($fixture) . "\n";
?>
0
1

 

现在,我们让测试程序从需要手工解释变为自动运行。在例3中,我们比较了期望值和实际值,如果相等就打印ok。如果我们发现有的结果不是ok,我们就知道有问题了。

3. 比较Arraysizeof()的期望值和实际值

<?php
$fixture = Array( );
print sizeof($fixture) == 0 ? "ok\n" : "not ok\n";
 
$fixture[] = "element";
print sizeof($fixture) == 1 ? "ok\n" : "not ok\n";
?>
ok
ok

 

我们现在引入一个新的要素,如果期望值和实际值不同,我们就抛出一个异常。这样我们的输出就更简单了。如果测试成功,什么也不做,如果有一个未处理异常,我们知道有问题了。

 

4.使用断言函数来测试Arraysizeof()

<?php
$fixture = Array( );
assertTrue(sizeof($fixture) = = 0);
 
$fixture[] = "element";
assertTrue(sizeof($fixture) = = 1);
 
function assertTrue($condition) {
 if (!$condition) {
  throw new Exception("Assertion failed.");
 }
}
?>

 

现在测试完全自动化了。和我们第一个版本不同,这个版本使得测试完全自动化了。

 

使用自动测试的目的是尽可能少的犯错误。尽管你的代码还不是完美的,用优良的自动测试,你会发现错误会明显减少。自动测试给了你对代码公正的信心。有这个信心,你可以在设计上有大胆的飞越(参见本书后“重构”一章),和你的团队伙伴关系更好(参见本书后“跨团队测试”一章),改善你和客户之间的关系,每天安心入睡,因为你可以证明由于你的努力,系统变得更好了。

 原文地址 http://blog.csdn.net/summerfang/archive/2006/05.aspx
发表于: 2007-02-05,修改于: 2007-02-05 17:30,已浏览723次,有评论0条 推荐 投诉

给我留言
版权所有 ChinaUnix.net 页面生成时间:2.76201