巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

举例详解PHP剧本的测试体例

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-27 10:45:01 阅读数: 114

一、常常利用测试示例

咱们常常会碰到这类环境:将一些不颠末任何测试的遗留代码停止从头编写测试,乃至这些代码仍是用面向东西写的。要对如许的代码停止测试,我的倡议是把代码分化成块,如许就轻易测试了。

但是,这些遗留代码并不是那末好重构的,比方:测试前,你不能在把代码从头编写,这是为了避免影响原有法式,固然也不好停止单位测试。

在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标签输入的buffer(缓冲内容)。

注重:输入缓冲撑持在PHP多个级别的嵌套,以是在大大都环境下,都能够捕获到,即便剧本在利用ob_*挪用自身。

三、测试剧本应包罗事件剧本的外部体例,因此在这个剧本规模内的体例都能够被挪用。比方:1.剧本所需的变量能够被界说为部分变量封装起来,如$connection作为一个数据库毗连。2.不是本来PHP的内置函数,应当加上东西来挪用,如:header()写成$this->header()。

具体代码

这便是咱们要测试的事件剧本东西,具体到剧本中,咱们还须要封装:

 

<?phpclass ForumPosting{  private $headers = array();   public function handleRequest($postRequest)  {    $_POST = $postRequest;    $connection = $this->getAConnection();    ob_start();    include "forum/post_new_copy.php";    $content = ob_get_clean();    return array(      "content" => $content,      "headers" => $this->headers    );  }   private function header($headerLine)  {    $this->headers[] = $headerLine;  }     ...}

这是咱们的测试代码:

 public function testANewPostIsCreated(){  $action = new ForumPosting();  $response = $action->handleRequest(array(    "id_thread" => 42,    "text" => "Hello, world",    ...  ));  $this->assertEquals("...", $response["content"]);  $this->assertContains("Content-type: text/html", $response["headers"]);}

 

测试正本只是临时的!它让咱们编写的测试不会转变。终究,咱们要将已经由过程测试的PHP剧本停止重构,以消弭冗余代码。

当咱们的测试完成后,能够将handleRequest()的内容替代成真实的逻辑代码。假设你要写良多如许的测试剧本,你能够写一个通用的测试东西,以知足你的测试须要。

二、PHP开辟者的单位测试东西包

在PHP范畴,单位测试的东西首要有PHPUNIT,PHPUNIT2和SimpleTest三种。此中PHPUNIT在功效上很简略,不算完美;PHPUNIT2是特地为PHP5写的单位测试东西,在布局和功效上都向Junit看齐;而SimpleTest则是一套很是适用的测试东西,此中的webTest撑持对web法式界面的测试,是Easy最为保举的一款测试东西。在本文中,咱们挑选SimpleTest停止先容。

相干常识:PHPUNIT2也是一款很好的东西,特别是架构上有良多值得圈点的处所,但愿未来能无机会在特地的文章中和大师分享。

SimpleTest:便是这么Simple

装置SimpleTest很简略,上sf.net高低载一个源码包,而后解压到web目次下就能够利用了,这里就未几说。

上面咱们先来看个例子:编写一个测试,查抄一个网站是不是能够拜候。

起首咱们引入要用到的文件:

代码列表:

require_once("../simpletest/unit_tester.php");require_once("../simpletest/web_tester.php");require_once("../simpletest/reporter.php");

而后咱们建立一个测试类:

代码列表:

class TestOfSite extends WebTestCase{  function TestOfSite()  {    $this->WebTestCase("测试");  }  function testSite()  {    $this->get("http://howgo.net/prettyface/display.php");    $this->assertTitle(".: facebook :.");  }}

起首咱们扩大了webTestCase类,如许咱们就能够主动获得测试web的才能,而后在机关函数中咱们间接利用基类的,只是把标题传给它。接着咱们就该写测试体例了,测试体例都因此‘test"开首的,用以辨认在咱们运转测试的时辰,类中哪些体例要停止挪用。

而$this->get将获得网页的内容,咱们指定它的标题为 ".: facebook :.", 接着咱们要做的便是实例化这个类的东西,并运转它。

代码列表:

$test = &new TestOfSite();$test->run(new HtmlReporter());

下边是运转成果:

若是测试犯错则会呈现下边的界面:

到这里一个简略的测试就算完成了。

实战练习 – 一个Login测试

上面咱们进入实战,在这个根本上完成一个login的测试。此次咱们先贴出完全的代码:

代码列表:

require_once("../simpletest/unit_tester.php");require_once("../simpletest/web_tester.php");require_once("../simpletest/reporter.php");class TestOfLogin extends WebTestCase{  function TestOfLogin()  {    $this->WebTestCase("Login测试");  }   function testLoginOk()  {    // 获得页面    $this->get("http://howgo.net/prettyface/login.php");    // 增加测试表项    $this->setField("name","Easy");    $this->setField("pass","******");    // 提交    $this->clickSubmit("提交");    // 观察提交后前往页面是不是准确    $this->assertWantedPattern("/胜利登录/");    // 点击页面链接    $this->clickLink("点击这里进入办理页面");    // 观察指定页面标题和关头内容    $this->assertTitle("ADMINCP");    $this->assertWantedPattern("/请挑选要停止的使命/");    // 加入登岸    $this->clickLink("加入办理");    $this->clickLink  }}

 

 

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家搜集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

26
04月
详解设置装备摆设 Apache 办事器撑持 PHP

详解设置装备摆设 Apache 办事器撑持 PHP 文件的剖析【申明】1. 本例中 Apache 版本为 httpd-2.4.20-x64-vc14... >>概况

09
04月
实战案例!新功效指点页设想思绪总结 - 网页

Darren大人 :总结了一套指点页的设想思绪,但愿自身在新的一年能多进修总结,在这里和大师分享交换,大师也能够提出题目和倡议。一. 需要分... >>概况

04
04月
我的头条乐趣认证很顺遂

简介:#2018我的头条时辰#我起头头条请求认证的时候是12月1日,那时也没留下截图,哈哈,你要不信,就当“证据缺乏”、无可置疑。而后天天认... >>概况

05
04月
肥牛试玩无需押金,月入4K+,进步iOS利用

简介:明天小编给大师保举一款相对良知赢利APP“肥牛试玩”,为甚么小编说是良知保举呢!现在是互联网时期,大家更是机不离手,手机作为咱们平常离... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站