python – 使用模拟库来修补类方法
发布时间:2020-12-20 13:32:57 所属栏目:Python 来源:网络整理
导读:我正在编写单元测试,我需要模拟一个方法调用,以便在大多数情况下它表现为方法本身,除非参数获得特殊值’insert into’.这是一个简化的生产代码: class CommandServer(object): def __init__(self): self.rowcount = None def runSQL(self,sql): print "Do s
我正在编写单元测试,我需要模拟一个方法调用,以便在大多数情况下它表现为方法本身,除非参数获得特殊值’insert into’.这是一个简化的生产代码:
class CommandServer(object): def __init__(self): self.rowcount = None def runSQL(self,sql): print "Do something useful" self.rowcount=5 return self class 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.rowcount p = Process() p.process() 打印 Do something useful Do something useful Number of rows: 5 我可以使用以下代码自己制作模拟版本: runSQL = CommandServer.runSQL def 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 = runSQLPatch p = Process() p.process() 打印 Do something useful Patched version in use Number of rows: -1 我想使用mock library来完成相同的工作(我相信这是python 3中包含的库).我怎样才能做到这一点? (Python 2.6.2) 解决方法
要完全清楚,它只包含在python 3.3中(我很高兴学会了,谢谢!).
否则,您可以使用的模式是 from mock import patch with 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 但这将涵盖所有情况,而不仅仅是您发送’插入’的情况.这可能会给你一个关于在哪里看的暗示,但除此之外,我不认为你正在寻找的东西是完全可能的模拟. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |