利用单元测试对PHP代码进行检查
们必须在每次测试之前将数据库恢复到某个已知点。其次,要注意这种恢复可能会对现有数据库造成破坏,因此我们必须对非生产数据库进行测试,或者在编写测试用例时注意不能影响现有数据库的内容。
数据库的单元测试是从数据库开始的。为了阐述这个问题,我们需要使用下面的简单模式。 清单 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |