仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1305|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之PHP剧本测试

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:31:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
然后大吼:别人可以,我为什么就不可以?(是不是有点阎罗教练的味道,默默的确是电影看多了,抽嘴巴是会痛的,各位其实明白这个道理了就行了)      咱们常常会碰到这类情形:将一些没有经由任何测试的遗留代码停止从头编写测试,乃至这些代码仍是用面向对象写的。要对如许的代码停止测试,我的建议是把代码分化成块,如许就轻易测试了。
    但是,这些遗留代码并非那末好重构的,好比:测试前,你不克不及在把代码从头编写,这是为了不影响原有法式,固然也欠好停止单位测试。
    在PHP法式中,凡是有一局部代码是写在几个index.php和script.php文件中的,这些.php文件寄存在几个分歧的文件夹里。假如不找到它们的进口点,是没法直接由Web办事器会见的。
    测试正本
    要测试一个PHP剧本,咱们需求摹拟一个HTTP恳求,并反省前往的呼应(response)是不是等于预期值。这里需求注重的是摹拟一个恳求,要界说response和request,这不单单是内容(content)的分歧,并且他们的头信息(header)也是分歧的。
    另外,假如咱们想要测试一个操作数据的事务剧本,咱们要确保不让它去毗连真实的数据库或使用法式的其他局部。
    在实际中,凡是没有人会直接拿原本的PHP剧本停止重写测试。由于怕把代码弄得不成恢复。我建议利用PHP剧本的正本,如许咱们就能够将PHP代码停止一些小手术了。
    若何将代码停止最小修正:删除include和require语句(假如它们没有被用到),而且修正外部函数的挪用体例,例如:将header()写成$object->header()。
    最初,咱们来测试这个事务剧本。测试完后,咱们可以从正本剧本中提掏出它们,并把它们放入新剧本文件中。
    详细步调
    1、摹拟一个HTTP恳求偏重新界说变量$_GET和$_POST,还要修正$_SERVER的header。
    2、获得恳求呼应,response的body可以经由过程ob_start()和ob_get_clean()捕捉,它可以搜集每个用echo()或以
    注重:输入缓冲撑持在PHP多个级其余嵌套,所以在大多半情形下,都可以捕捉到,即便剧本在利用ob_*挪用自己。
    3、测试剧本应包括事务剧本的外部办法,因而在这个剧本局限内的办法都可以被挪用。例如:
    1.剧本所需的变量可以被界说为部分变量封装起来,如$connection作为一个数据库毗连。
    2.不是本来PHP的内置函数,应当加上对象来挪用,如:header()写成$this->header()。
    详细代码
    这就是咱们要测试的事务剧本对象,详细到剧本中,咱们还需求封装:
   
    <?php
    class 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+MYSQL WEB开发(第三版)》号称圣经级,(也许是个不错的选择(声明:作者没给我啥好处费,我也不是书托,隔着大老远,我连他老兄的面都没见过的说-_-)
海妖 该用户已被删除
沙发
发表于 2015-2-4 01:06:10 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
谁可相欹 该用户已被删除
板凳
发表于 2015-2-9 08:57:40 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
地板
发表于 2015-2-27 05:02:38 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
金色的骷髅 该用户已被删除
5#
发表于 2015-3-7 14:54:27 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
小魔女 该用户已被删除
6#
发表于 2015-3-15 07:37:23 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
因胸联盟 该用户已被删除
7#
发表于 2015-3-17 01:10:15 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
若相依 该用户已被删除
8#
发表于 2015-3-20 03:55:58 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
只想知道 该用户已被删除
9#
发表于 2015-3-23 04:42:13 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
乐观 该用户已被删除
10#
发表于 2015-3-24 22:16:12 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
飘灵儿 该用户已被删除
11#
发表于 2015-3-31 17:46:11 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
透明 该用户已被删除
12#
发表于 2015-4-1 03:08:15 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
爱飞 该用户已被删除
13#
发表于 2015-4-3 00:37:16 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
老尸 该用户已被删除
14#
 楼主| 发表于 2015-4-18 00:51:28 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
冷月葬花魂 该用户已被删除
15#
发表于 2015-4-19 02:28:44 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
小女巫 该用户已被删除
16#
发表于 2015-5-1 00:09:16 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
蒙在股里 该用户已被删除
17#
发表于 2015-5-1 15:10:41 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
不帅 该用户已被删除
18#
发表于 2015-5-9 21:24:38 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
简单生活 该用户已被删除
19#
发表于 2015-6-7 20:19:23 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
再现理想 该用户已被删除
20#
发表于 2015-6-12 23:02:16 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-13 12:02

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表