python – 使用模拟库来修补类方法

python – 使用模拟库来修补类方法,第1张

概述我正在编写单元测试,我需要模拟一个方法调用,以便在大多数情况下它表现为方法本身,除非参数获得特殊值’insert into’.这是一个简化的生产代码: class CommandServer(object): def __init__(self): self.rowcount = None def runSQL(self, sql): print " 我正在编写单元测试,我需要模拟一个方法调用,以便在大多数情况下它表现为方法本身,除非参数获得特殊值’insert into’.这是一个简化的生产代码:

class CommandServer(object):    def __init__(self):        self.rowcount = None    def runsql(self,sql):        print "Do something useful"        self.rowcount=5        return selfclass Process(object):    def process(self):        cs = CommandServer()        cs.runsql("create table tbl1(X VARCHAR2(10))")        r = cs.runsql("insert into tbl1 select * from tbl2")        print "Number of rows: %s" % r.rowcountp = Process()p.process()

打印

Do something usefulDo something usefulNumber of rows: 5

我可以使用以下代码自己制作模拟版本:

runsql = CommandServer.runsqldef runsqlPatch(self,sql):    if sql.lstrip().startswith('insert into'):        print "Patched version in use"        class res(object):            rowcount = -1        return res    else:        return runsql(self,sql)CommandServer.runsql = runsqlPatchp = Process()p.process()

打印

Do something usefulPatched version in useNumber of rows: -1

我想使用mock library来完成相同的工作(我相信这是python 3中包含的库).我怎样才能做到这一点? (Python 2.6.2)

解决方法 要完全清楚,它只包含在python 3.3中(我很高兴学会了,谢谢!).

否则,您可以使用的模式是

from mock import patchwith patch.object(CommandServer,'runsql') as runsql:    class res(object):       rowcount = -1    runsql.return_value = res    p = Process()    p.process()    for c in runsql.call_List:        assert c[1].lstrip().startswith('insert into') is True

但这将涵盖所有情况,而不仅仅是您发送’插入’的情况.这可能会给你一个关于在哪里看的暗示,但除此之外,我不认为你正在寻找的东西是完全可能的模拟.

总结

以上是内存溢出为你收集整理的python – 使用模拟库来修补类方法全部内容,希望文章能够帮你解决python – 使用模拟库来修补类方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存