初识 PHPunit stub 模拟返回数据
我们一般使用单测对公司业务里的代码进行测试,他会帮忙找到你的一个个小小的思考不够全面的地方。(虽然大牛说过开发可以先写单测再来写实现的代码,然而现在的我感觉离那个还是有好多距离来着)
stub(桩件):
“将对象替换为(可选地)返回配置好的返回值的测试替身的实践方法称为上桩(stubbing)”——这是官方文档给出的上桩解释
现在倒回来看我才理解,怎么说呢?举个梨子。
====前提
我想测试的是这样一个方法:switchClothes($username) ----通过名字查询数据库,性别是1的,就返回裤子,是0的,就返回裙子;
find("id=$username"); if($gender==0){ return "裙子"; }else{ return "裤子"; } } }
查询数据库我封装了一个Database类里面的: find()
====开始写测试
首先我需要测试的是switchClothes这个类,可是在这个类里我需要去通过实例化database这个类用select方法,查询数据库再来得到我到底是要裤子还是裙子。所以,,真的是太麻烦了,我只是单纯的想测测这个方法的逻辑好么,万一数据库挂了,万一这个username不存在,我难道还要专门去数据库创造这样一条数据么,太麻烦了也不够好。万一需要测试包含更新数据的方法,难道还要真的修改数据么?
stub就华丽丽降临了。妈妈再也不用担心我要去操作数据库,再也不担心接口不通神马的了。
我可以对这个类进行上桩。说通俗点,我觉得就是对这个类进行了一个模拟,做了一个假的database类;
如上如 A=switchClothes B=database类 D=数据库 C=stub 的那个类
本来应该是A调用B,B查询数据库的.
但是C的存在就走了红色那条线,C不会去查数据库,C是被我掌控的,我可以指定里面的find()方法返回1或者0 至少在A看来它和B一样,反正会给我返回个0或者1来的。这就等于C 将A与B,D这个体系隔绝了开来,减少了耦合;
然后,就可以开始构造我需要的C了。
getMockBuilder("database")//类名 ->setMethods(array('find')) //可以是多个方法 ->getMock(); // 配置桩件。 $stub->method('find')//想要设置返回值的方法 ->willReturn(0);//设置返回值 // 现在调用 $stub->select() 将返回 '裙子'。 $this->assertEquals('裙子', $stub->find()); } } ?>
这就是C了。
单测的时候,走红色那条路就行了。
all
下一篇: PHP弱类型安全问题
推荐阅读
-
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
-
前端使用mockjs模拟接口返回数据
-
python模拟登陆爬取接口返回数据插入数据库等
-
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
-
初识 PHPunit stub 模拟返回数据
-
初识 PHPunit stub 模拟返回数据
-
php 表单提交错误后返回数据消失问题的解决方法 php判断表单是否提交 php curl模拟表单提交 php表单重复提
-
python模拟登陆爬取接口返回数据插入数据库等
-
初识 PHPunit stub 模拟返回数据
-
初识 PHPunit stub 模拟返回数据