我应该如何重写我的数据库执行/提交以使其适合单元测试?

前端之家收集整理的这篇文章主要介绍了我应该如何重写我的数据库执行/提交以使其适合单元测试?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在努力开始进行单元测试,同时开发一个小的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)可能很有趣.

原文链接:https://www.f2er.com/mssql/76443.html

猜你在找的MsSQL相关文章