中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
利用单元测试在每个层上对PHP代码进行检查(1)
作者:Jack D. Herrington 时间:2007-09-26 14:44 出处:51cto 责编:月夜寒箫
              摘要:利用单元测试在每个层上对PHP代码进行检查(1)

Web应用程序是24x7不间断运行的,因此我的程序是否还在运行这个问题会在晚上一直困扰我。单元测试已经帮我对自己的代码建立了足够的信心——这样我就可以安稳地睡个好觉了。

单元测试是一个为代码编写测试用例并自动运行这些测试的框架。测试驱动的开发是一种单元测试方法,其思想是应该首先编写测试程序,并验证这些测试可以发现错误,然后才开始编写需要通过这些测试的代码。当所有测试都通过时,我们开发的特性也就完成了。这些单元测试的价值是我们可以随时运行它们——在签入代码之前,重大修改之后,或者部署到正在运行的系统之后都可以。

PHP单元测试

对于PHP来说,单元测试框架是PHPUnit2。可以使用PEAR命令行作为一个PEAR模块来安装这个系统:% pear install PHPUnit2。

在安装这个框架之后,可以通过创建派生于PHPUnit2_Framework_TestCase的测试类来编写单元测试。

模块单元测试

我发现开始单元测试最好的地方是在应用程序的业务逻辑模块中。我使用了一个简单的例子:这是一个对两个数字进行求和的函数。为了开始测试,我们首先编写测试用例,如下所示。

清单1.TestAdd.php

            


require_once 'Add.php';

require_once 'PHPUnit2/Framework/TestCase.php';

class TestAdd extends PHPUnit2_Framework_TestCase

{

function test1() { $this->assertTrue( add( 1, 2 ) == 3 ); }

function test2() { $this->assertTrue( add( 1, 1 ) == 2 ); }

}

?>

这个TestAdd类有两个方法,都使用了test前缀。每个方法都定义了一个测试,这个测试可以与清单1一样简单,也可以十分复杂。在本例中,我们在第一个测试中只是简单地断定1加2等于3,在第二个测试中是1加1等于2。

PHPUnit2系统定义了assertTrue()方法,它用来测试参数中包含的条件值是否为真。然后,我们又编写了Add.php模块,最初让它产生错误的结果。

清单2.Add.php

            


function add( $a, $b ) { return 0; }

?>

现在运行单元测试时,这两个测试都会失败。

清单3.测试失败

            

% phpunit TestAdd.php

PHPUnit 2.2.1 by Sebastian Bergmann.

FF

Time: 0.0031270980834961

There were 2 failures:

1) test1(TestAdd)

2) test2(TestAdd)

FAILURES!!!

Tests run: 2, Failures: 2, Errors: 0, Incomplete Tests: 0.

现在我知道这两个测试都可以正常工作了。因此,可以修改add()函数来真正地做实际的事情了。

            


function add( $a, $b ) { return $a+$b; }

?>

现在这两个测试都可以通过了。

清单4.测试通过

            

% phpunit TestAdd.php

PHPUnit 2.2.1 by Sebastian Bergmann.

..

Time: 0.0023679733276367

OK (2 tests)

%

尽管这个测试驱动开发的例子非常简单,但是我们可以从中体会到它的思想。我们首先创建了测试用例,并且有足够多的代码让这个测试运行起来,不过结果是错误的。然后我们验证测试的确是失败的,接着实现了实际的代码使这个测试能够通过。

我发现在实现代码时我会一直不断地添加代码,直到拥有一个覆盖所有代码路径的完整测试为止。在本文的最后,您会看到有关编写什么测试和如何编写这些测试的一些建议。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有