快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
们必须在每次测试之前将数据库恢复到某个已知点。其次,要注意这种恢复可能会对现有数据库造成破坏,因此我们必须对非生产数据库进行测试,或者在编写测试用例时注意不能影响现有数据库的内容。

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

  清单 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

  <?phprequire_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_get() {     $this->assertTrue( Authors::delete_all() );     $this->assertTrue( Authors::insert( ''Jack'' ) );     $this->assertTrue( Authors::insert( ''Joe'' ) );     $found = Authors::get_all();     $this->assertTrue( $found != null );     $this->assertTrue( count( $found ) == 2 );  }}?>

  这组测试覆盖了从表中删除作者、向表中插入作者以及在验证作者是否存在的同时插入作者等功能。这是一个累加的测试,我发现对于寻找错误来说这非常有用。观察一下哪些测试可以正常工作,而哪些测试不能正常工作,就可以快速地找出哪些地方出错了,然后就可以进一步理解它们之间的区别。

  最初产生失败的 dblib.php PHP 数据库访问代码版本如下所示。

  清单 7. dblib.php

  <?phprequire_once(''DB.php'');class Authors{  public static function get_db()  {    $dsn = ''mysql://root:password@localhost/unitdb'';    $db =& DB::Connect( $dsn, array() );    if (PEAR::isError($db)) { die($db->getMessage()); }    return $db;  }  public static function delete_all()  {    return false;  }  public static function insert( $name )  {    return false;  }  public static function get_all()  {    return null;  }}?>

  对清单 8 中的代码执行单元测试会显示这 3 个测试全部失败了:

  清单 8. dblib.php

  % phpunit TestAuthors.phpPHPUnit 2.2.1 by Sebastian Bergmann.FFFTime: 0.007500171661377There were 3 failures:1) test_delete_all(TestAuthors)2) test_insert(TestAuthors)3) test_insert_and_get(TestAuthors)FAILURES!!!Tests run: 3, Failures: 3, Errors: 0, Incomplete Tests: 0.%

  现在我们可以开始添加正确访问数据库的代码 —— 一个方法一个方法地添加 —— 直到所有这 3 个测试都可以通过。最终版本的 dblib.php 代码如下所示。

  清单 9. 完整的 dblib.php

  <?phprequire_once(''D

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号