博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目中初试PHP单元测试
阅读量:5843 次
发布时间:2019-06-18

本文共 2421 字,大约阅读时间需要 8 分钟。

只能叫初试,前面虽然做了一些PHPUnit与团队所用框架的整合,但在整个团队还没有人可以主动推动这个事情,而作为Leader最重要的一种能力应该是“让正确的事情发生”,所以今天开始着手对现有代码的Model进行单元测试用例和代码的编写。

Db测试用例选择了MysqlDump工具生成Mysql专用xml格式文件存储,这样对开发人员来说应该是最方便的。生成的文件类似格式如下:

1
admin
324d1907d9ca6733d399b87affe48c74
1448011176
1276
0

相关命令:

mysqldump -uroot -p --xml your_db_name admin > test/data/Application/Admin/Model/admin.xml

测试什么呢?

无非是增删改查的各种场景,相对于常规框架如TP底层提供的“增删改”,在DbModel中封装过一次后,一般要求能过滤掉异常情况,确保按正常逻辑作用。

“查”则主要是判断各种复杂的sql查询及数据拼装后,与预期的结果是否相符。

php这种动态类型语言,最大的问题就是,很适合一个人开发,但一旦到团队环境中,基于数组的各种随机数据结构,是导致开发效率低下和维护成本上升的最大因素。

单元测试在这种场景下,更多的像是一种证明,告诉团队其他成员我的代码执行后要返回这个格式的结果,我可以证明这一点,具体返回的数据格式,你去找具体的测试用例一看便知。

测试代码

object = new Admin; } protected function getDataSet() { return $this->createMySQLXMLDataSet(TEST_PATH . '/data/Application/Admin/Model/admin.xml'); }/** * @covers Admin\Model\Admin::getList * @todo Implement testGetList(). */ public function testGetList() { $this->assertEquals(1, $this->getConnection()->getRowCount('admin'), "Pre-Condition"); }/** * @covers Admin\Model\Admin::add * @todo Implement testAdd(). */ public function testAdd() { $this->assertFalse($this->object->add([]));//TODO 更多条件测试 } /** * @covers Admin\Model\Admin::update * @todo Implement testUpdate(). */ public function testUpdate() { $this->assertFalse($this->object->update([])); $result = $this->object->update(['id' => '-2']); $this->assertFalse($result);//TODO 更多条件测试 }/** * @covers Admin\Model\Admin::del * @todo Implement testDel(). */ public function testDel() { $this->assertTrue($this->object->del(1)); } /** * @covers Admin\Model\Admin::del * @todo Implement testDel(). */ public function testDel2() { $this->assertFalse($this->object->del(0)); }

测试的效果

  1. 完善每个方法的过滤机制,确保正确的事情发生、不正确的事情不会发生;
  2. 意外的发现DbModel框架底层update方法对执行结果的判断不足的bug,即当mysql未发生实际的数据更新时,sql语句本身还是返回true,但affected_rows为0,作为框架来说,必须能正确处理这种情况。

转载地址:http://tyqcx.baihongyu.com/

你可能感兴趣的文章
前端每隔几秒发送一个请求
查看>>
div+css+js 树形菜单
查看>>
javax.jdo.option.ConnectionURL配置的问题
查看>>
ubuntu 开启 apache mod_rewrite
查看>>
android EventBus 3.0 混淆配置
查看>>
数据库备份需要注意的
查看>>
判断点在多边形内
查看>>
程序报错与提示
查看>>
EXT.NET 更改lable和Text的颜色
查看>>
我的友情链接
查看>>
把文件放在SD卡
查看>>
postfix搭建及配置
查看>>
DNS区域委派与转发
查看>>
[deviceone开发]-一个很炫的手势动画示例
查看>>
Windows Server 2008 RemoteApp---发布应用程序
查看>>
IPC-----消息队列
查看>>
Spring Cloud Feign注意点
查看>>
Js中的for in
查看>>
白帽子技术分析会话劫持实战讲解
查看>>
互联网项目总结
查看>>