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 – 使用模拟库来修补类方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)