中国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代码进行检查(3)
作者:佚名 时间:2007-09-26 14:45 出处:51cto 责编:月夜寒箫
              摘要:利用单元测试在每个层上对PHP代码进行检查(3)

HTML测试

对整个PHP应用程序进行测试的下一个步骤是对前端的超文本标记语言(HTML)界面进行测试。要进行这种测试,我们需要一个如下所示的Web页面。

这个页面对两个数字进行求和。为了对这个页面进行测试,我们首先从单元测试代码开始入手。

清单10.TestPage.php

            


require_once 'HTTP/Client.php';

require_once 'PHPUnit2/Framework/TestCase.php';

class TestPage extends PHPUnit2_Framework_TestCase

{

function get_page( $url )

{

$client = new HTTP_Client();

$client->get( $url );

$resp = $client->currentResponse();

return $resp['body'];

}

function test_get()

{

$page = TestPage::get_page( 'http://localhost/unit/add.php' );

$this->assertTrue( strlen( $page ) > 0 );

$this->assertTrue( preg_match( '/ /', $page ) == 1 );

}

function test_add()

{

$page = TestPage::get_page( 'http://localhost/unit/add.php?a=10&b=20' );

$this->assertTrue( strlen( $page ) > 0 );

$this->assertTrue( preg_match( '/ /', $page ) == 1 );

preg_match( '/(.*?)<\/span>/', $page, $out );

$this->assertTrue( $out[1]=='30' );

}

}

?>

这个测试使用了PEAR提供的HTTP Client模块。我发现它比内嵌的PHP Client URL Library(CURL)更简单一点儿,不过也可以使用后者。

有一个测试会检查所返回的页面,并判断这个页面是否包含HTML。第二个测试会通过将值放到请求的URL中来请求计算10和20的和,然后检查返回的页面中的结果。

这个页面的代码如下所示。

清单11.TestPage.php

            



+

=








这个页面相当简单。两个输入域显示了请求中提供的当前值。结果span显示了这两个值的和。标记标出了所有区别:它对于用户来说是不可见的,但是对于单元测试来说却是可见的。因此单元测试并不需要复杂的逻辑来找到这个值。相反,它会检索一个特定标记的值。这样当界面发生变化时,只要span存在,测试就可以通过。

与前面一样,首先编写测试用例,然后创建一个失败版本的页面。我们对失败情况进行测试,然后修改页面的内容使其可以工作。结果如下:

清单12.测试失败情况,然后修改页面

            

% phpunit TestPage.php

PHPUnit 2.2.1 by Sebastian Bergmann.

..

Time: 0.25711488723755

OK (2 tests)

%

这两个测试都可以通过,这就意味着测试代码可以正常工作。

不过对HTML前端的测试有一个缺陷:JavaScript。超文本传输协议(HTTP)客户机代码对页面进行检索,但是却没有执行JavaScript。因此如果我们在JavaScript中有很多代码,就必须创建用户代理级的单元测试。我发现实现这种功能的最佳方法是使用Microsoft®Internet Explorer®内嵌的自动化层功能。通过使用PHP编写的Microsoft Windows®脚本,可以使用组件对象模型(COM)接口来控制Internet Explorer,让它在页面之间进行导航,然后使用文档对象模型(DOM)方法在执行特定用户操作之后查找页面中的元素。

这是我了解的对前端JavaScript代码进行单元测试的惟一一种方法。我承认它并不容易编写和维护,这些测试即使在对页面稍微进行改动时也很容易遭到破坏。

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