php - 依赖于数据的工程如何进行单元测试?
ringa_lee
ringa_lee 2017-04-10 15:22:08
[PHP讨论组]

做一个项目势必要进行单元测试以保证程序的健壮性,以便保证版本迭代时功能正常。但是如果一个程序(如CMS等)本身就是依赖于数据库的,应该如何在保证不会破坏数据库的情况下进行单元测试呢?

举例:
访问?id=1的页面,先查询

sqlSELECT * FROM `data` WHERE `ID` = 1

,然后将其赋值给$data->ID$data->Title这些属性;要保证这些属性的值正常
然后,根据一些信息算出$data->Hash,如$data->Hash = md5($data->ID)这些计算的值也要正常
接着,删除id=1的文章,要

sqlDELETE FROM `data` WHERE `ID` = 1

必须保证ID所在行被删除
再其次,后台发布一篇文章,必须使得数据库内多出ID=2,内容为设定值的文章。但是HTML代码内容不一定要相同,可以允许诸如多余的空格、换行。
还需要模拟XML-RPC协议发表一篇文章。

像以上的内容,应该如何进行单元测试呢?

知乎同名问题:http://www.zhihu.com/question/28278690

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
PHP中文网

用单独的数据库运行测试,每次测试开始前都清空数据库,并重新生成测试数据。

另一种做法是每次生成测试数据的时候记录下来生成的数据的 ID, 然后在完成测试后删除本次生成的数据,而不是每次都清空数据库。这种方案比较适合既需要自动测试,又需要手动测试的情况,自动测试不会导致手动测试时添加的数据被删除。

测试最好别依赖于具体的值(比如你的例子的 ID=1),最好用单独的函数来创建每一条测试数据(比如 generateAccountgenerateArticle),这些函数返回创建出来的数据的 ID, 否则如果硬编码 ID 的话,在添加或移除测试的时候会很麻烦。

PHP中文网

使用三种数据库配置:
dev: 开发时使用的数据库配置
test: 测试用的数据库配置, 每次自动清空和load fixtures
production: 部署时生产环节的数据库配置

迷茫

你用isolating test、mock、fakes关键字搜索一下,就知道怎么做对外部数据/逻辑有依赖的单元测试了。

大家讲道理

插件得在你的git初始化了这个目录才行。他这样的原因就是没有找到当前路径里的git文件夹,这个文件夹里有远程的地址。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号