重构实例1:抽取冗余代码 - 未通过测试而进行的第二次修正
2012-07-27 14:26
691 查看
昨天重构了OPEN-API模块,挺高兴,觉得自己做的不错,结果昨天把程序重构完,除了挑出来作为测试接口的代码其他代码都没有测试,今天上午要做其他的维护工作,觉得还是先跑一次测试再说,测试程序并不是特地为这个接口进行开发,当时为这个OPEN-API写了一个SDK,这个程序其实是为了SDK开发的测试程序,且写的并不完善,但即使是这样,测试程序的断言(assert)仍然报告执行出了问题,因此我又去排查程序,发现有几个接口,它的函数参数不只一个参数(self参数),而我的几类再调具体子类的时,就没有提供其他的参数,因此产生运行时错误,了解到这一点,就翻了手上的《python学习手册》花了一个小时解决问题
最后,对测试程序做个说明 镇宅神兽 13:36:58:
我理解调试指的是单步啥的,但是测试是根据接口,预先定义好输入输出,什么样的输入会产生什么样的输出,一旦不符合规则,立即报警,且可以重复执行的脚本性程序
class OpenApiBase: def __init__(self): self.funPOST = self.POST self.POST = self.post #将post函数声明为支持可变参数的函数,这样它可以处理子类的POST函数有多个参数的情况 def post(self,*args): try: wi = web.input() token = wi.token self.serverToken = getServerToken(db,token) web.debug(str(self.serverToken)) if self.serverToken == False: return '{"result":"error","message":"token is error"}' if checkExpires(self.serverToken): return '{"result":"error","message":"token is expires"}' #执行每个子类具体的代码,注意:apply将可变参数送入funPOST return apply(self.funPOST,args) except: if DEBUG: raise return '{"result":"error","message":""}' class getFolders(OpenApiBase): #该函数有两个参数,action是业务逻辑里必须的,因此父类的post函数调用时必须传递进来 def POST(self,action): wi = web.input() userId = self.serverToken.userId #子类拿到包含身份信息的变量,该变量是父类创建,通过属性拿到 if action == "person": #使用action list = tnuser.User.getPersonFolders(db,userId) return '{"result":"ok","message":"","data":%s}' %(json.dumps(list)) if action == "project": #使用action projectId = util.unhash17(int(wi.id)) folderId = getProjectRootFolderId(db,projectId) if folderId == -1: return '{"result":"error","message":"","data":[]}' list = folder.getSubFolders(db,folderId,userId) for i in list: i["projectId"] = util.hash17(i["projectId"]) return '{"result":"ok","message":"","data":%s}' %(json.dumps(list)) if action == "subfolder": #使用action folderId = int(wi.id) list = folder.getSubFolders(db,folderId,userId) for i in list: i["projectId"] = util.hash17(i["projectId"]) return '{"result":"ok","message":"","data":%s}' %(json.dumps(list)) return '{"result":"error","message":"","data":[]}'
最后,对测试程序做个说明 镇宅神兽 13:36:58:
我理解调试指的是单步啥的,但是测试是根据接口,预先定义好输入输出,什么样的输入会产生什么样的输出,一旦不符合规则,立即报警,且可以重复执行的脚本性程序
相关文章推荐
- 编写可测试的前端代码第二部分 – 从反模式进行重构
- ASP.net 2.0发送邮件实例,本人已经测试通过,贴出代码
- Spring代码实例系列-01:hellospring(通过xml文件以默认的方式进行setter注入)
- Spring代码实例系列-02:松耦合loose coupling(通过xml文件以默认的方式进行setter注入)
- 重构实例1:最初的测试代码
- 重构实例1:消除冗余代码
- Spring+Junit4进行接口测试实例代码
- Android通过多点触控的方式对图片进行缩放的实例代码
- ASP.net 2.0发送邮件实例,本人已经测试通过,贴出代码
- Android开发使用MockObject进行测试代码
- android 监听SDCard安装和卸载的代码片段(测试通过)
- SharpPcap网络包捕获框架的使用--实例代码在vs2005调试通过
- 使用Java进行SNMP编程-SNMP4J-SNMPv1/v2-代码实例
- C#通过XML节点属性/属性值读取写入XML操作代码实例
- C#远程开机代码 【局域网测试通过】
- Activity通过获得Service实例与其进行通信
- 从测试的角度来重新反思我们自己的程序以及我们的程序员之路——“通过追本溯源来进行前瞻性思考”
- android 监听SDCard安装和卸载的代码片段(测试通过)
- 对深层嵌套的代码进行重构
- 数字倒数跳转的js代码(已测试通过)