欢迎光临极品网,更多、更新的资源信息尽在Jpinw.Com!本站所有信息资源每日更新新的内容,请大家继续关注www.Jpinw.com!如果觉得本站还不错,对您有帮助,别忘了向您的朋友推荐本站!请记好本站网址:http://www.Jpinw.com,网站发展靠大家多多的支持!!!

极品网 极品课件 极品论文 极品文学 极品游戏 极品美容 极品手机资源 极品股票

#
免费资源: 免费域名 | 免费空间 | 免费推广 | 免费邮箱 | 免费硬盘 | 免费论坛 | 免费留言 | 免费统计 | 在线投稿 | 更多...
电脑学院: 操作系统 | 安全相关 | 网页设计 | 编程开发 | 建站经验 | 服务器类 | 黑客攻防 | 菜鸟入门 | 教你网赚 | 更多...
文章导航: 网赚学堂 | 网赚秘笈 | 网赚三维 | 网赚先锋 | 网赚资讯 | 感悟网赚 | 众生百态 | 经典美文 | 范文中心 | 更多...
图酷天下: 时事图酷 | 娱乐图酷 | 搞笑图酷 | 时尚图酷 | 体育图酷 | 另类经典 | 论文资源 | 课件下载 | 文学知识 | 更多...

您现在的位置: 极品网 >> 电脑学院 >> 编程开发 >> php >> 教程正文

利用单元测试对PHP 代码进行检查            【字体:
利用单元测试对PHP 代码进行检查
作者:佚名    教程来源:不详    点击数:    更新时间:2008-1-1    

 








利用单元测试对PHP 代码进行检查。

    测试驱动的开发和单元测试是确保代码在经过修改和重大调整之后依然能如我们期望的一样工作的最新方法。在本文中,您将学习到如何在模块、数据库和用户界面(UI)层对自己的 PHP 代码进行单元测试。

现在是凌晨 3 点。我们怎样才能知道自己的代码依然在工作呢?

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

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

PHP 单元测试

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

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

模块单元测试

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


清单 1. TestAdd.php

<?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

<?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() 函数来真正地做实际的事情了。

<?php



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



?>




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


清单 4. 测试通过

% phpunit TestAdd.php



PHPUnit 2.2.1 by Sebastian Bergmann.







..







Time: 0.0023679733276367







OK (2 tests)



%




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

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

数据库测试

    在进行模块测试之后,就可以进行数据库访问测试了。数据库访问测试 带来了两个有趣的问题。首先,我们必须在每次测试之前将数据库恢复到某个已知点。其次,要注意这种恢复可能会对现有数据库造成破坏,因此我们必须对非生产数据库进行测试,或者在编写测试用例时注意不能影响现有数据库的内容。

数据库的单元测试是从数据库开始的。为了阐述这个问题,我们需要使用下面的简单模式。


清单 5. Schema.sql

DROP TABLE IF EXISTS authors;



CREATE TABLE authors (



  id MEDIUMINT NOT NULL AUTO_INCREMENT,



  name TEXT NOT NULL,



  PRIMARY KEY ( id )



);




清单 5 是一个 authors 表,每条记录都有一个相关的 ID。

接下来,就可以编写测试用例了。


清单 6. TestAuthors.php

<?php



require_once 'dblib.php';



require_once 'PHPUnit2/Framework/TestCase.php';







class TestAuthors extends PHPUnit2_Framework_TestCase



{



  function test_delete_all() {



     $this->assertTrue( Authors::delete_all() );



  }



  function test_insert() {



     $this->assertTrue( Authors::delete_all() );



     $this->assertTrue( Authors::insert( 'Jack' ) );



  }



  function test_insert_and

[1] [2] [3] [4] 下一篇

 

教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关教程
    asp+ 利用数据绑定来处理XML
    ASP.NET中利用DataGrid的自定
    利用ASP.NET设计FTP文件上传
    ASP.NET中利用水晶报表创建图
    ASP.NET 2.0中合并 GridView
    ASP.NET 2.0合并表头单元格
    充分利用ASP.NET缓存提高站点
    利用 ASP.NET 2.0 创建自定义
    利用 ASP.NET Starter Kit 即
    利用ASP.NET DataGrid显示主
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    极品网
    | 设为首页 | 加入收藏 | 友情链接 | 版权声明 |
    极品网

    Copyright 2006 Jpinw.com 极品网

    备案号:浙ICP备07010375号

    极品网