我应该如何重写我的数据库执行/提交以使其适合单元测试?
发布时间:2020-12-12 07:47:51 所属栏目:MsSql教程 来源:网络整理
导读:我一直在努力开始进行单元测试,同时开发一个小的cli程序. 我的程序基本上解析命令行参数和选项,并决定调用哪个函数.每个函数都对数据库执行一些操作. 所以,例如,我可能有一个创建函数: def create(self,opts,args): #I've left out the error handling. strt
我一直在努力开始进行单元测试,同时开发一个小的cli程序.
我的程序基本上解析命令行参数和选项,并决定调用哪个函数.每个函数都对数据库执行一些操作. 所以,例如,我可能有一个创建函数: def create(self,opts,args): #I've left out the error handling. strtime = datetime.datetime.now().strftime("%D %H:%M") vals = (strtime,opts.message,opts.keywords,False) self.execute("insert into mytable values (?,?,?)",vals) self.commit() 我的测试用例应该调用这个函数,然后执行select sql来检查是否输入了行?这听起来很合理,但也使测试更难维护.你会重写函数来返回一些东西并检查返回值吗? 谢谢 解决方法Alex的答案涵盖了依赖注入方法.另一个是考虑你的方法.目前,它有两个阶段:构造SQL语句,并执行SQL语句.您不想测试第二阶段:您没有编写SQL引擎或数据库,您可以假设它们正常工作.阶段1是您的工作:构建SQL语句.因此,您可以重新组织代码,以便只测试阶段1:def create_sql(self,False) return "insert into mytable values (?,vals def create(self,args): self.execute(*self.create_sql(opts,args)) self.commit() create_sql函数是阶段1,现在它的表达方式允许您直接针对它编写测试:它接受值并返回值,因此您可以编写涵盖其功能的单元测试.创建函数本身现在更简单,无需进行如此详尽的测试:您可以进行一些测试,证明它确实可以正确执行SQL,但您不必覆盖创建中的所有边缘情况. BTW:This video from Pycon (Tests and Testability)可能很有趣. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |