background image

PHP 脚本测试的方法

   我们经常会遇到这种情况:将一些没有经过任何测试的遗留代码进行重新编写测试,甚
至这些代码还是用面向对象写的。要对这样的代码进行测试,我的建议是把代码分解成块,
这样就容易测试了。

  然而,这些遗留代码并不是那么好重构的,比如:测试前,你不能在把代码重新编写
这是为了避免影响原有程序,当然也不好进行单元测试。

  在

PHP 程序中,通常有一部分代码是写在几个 index.php 和 script.php 文件中的,这

.php 文件存放在几个不同的文件夹里。如果不找到它们的入口点,是无法直接由 Web 服

务器访问的。

  测试副本

  要测试一个

PHP 脚本,我们需要模拟一个 HTTP 请求,并检查返回的响应(response)是

否等于预期值。这里需要注意的是模拟一个请求,要定义

response 和 request,这不仅仅是内

(content)的不同,而且他们的头信息(header)也是不同的。

  此外,如果我们想要测试一个操作数据的事务脚本,我们要确保不让它去连接真正的
数据库或应用程序的其余部分。

  在现实中,通常没有人会直接拿原有的

PHP 脚本进行重写测试。因为怕把代码弄得不

可恢复。我建议使用

PHP 脚本的副本,这样我们就可以将 PHP 代码进行一些小手术了。

  如何将代码进行最小修改:删除

include 和 require 语句(如果它们没有被用到),并且修

改内部函数的调用方式,例如:将

header()写成$object->header()。

  最后,我们来测试这个事务脚本。测试完后,我们可以从副本脚本中提取出它们,并把
它们放入新脚本文件中。

  具体步骤

  一、模拟一个

HTTP 请求并重新定义变量$_GET 和$_POST,还要修改$_SERVER 的

header。

  二、获取请求响应,

response 的 body 可以通过 ob_start()和 ob_get_clean()捕获,它可以

收集每一个用

echo()或以

  注意:输出缓冲支持在

PHP 多个级别的嵌套,所以在大多数情况下,都可以捕获到,

即使脚本在使用

ob_*调用本身。

  三、测试脚本应包含事务脚本的内部方法,因此在这个脚本范围内的方法都可以被调用。