如何在Python中模拟cx_Oracle游标

时间:2018-09-20 20:41:21

标签: python mocking patch python-unittest cx-oracle

我在一个类中有以下两个函数,我需要模拟数据库连接和游标结果。 cx_Oracle.connect已成功修补它按预期方式工作。但是游标,callfunc,fetch_all不会被嘲笑。知道正确的语法是什么吗?

class dbconnect:

    def db_connect(self, connection_details):
        connection = cx_Oracle.connect(user_name,pwd,<connection_string>)
        return connection

    def execute_function(self, sqlFunction, args):
        cursor = self.connection.cursor()
        res=cursor.callfunc(sqlFunction, cursor.var(cx_Oracle.CURSOR), args)
        results = {'headers' : [x[0] for x in res.description],
            'data': res.fetchall()
        }
        cursor.close()
        return results

我的模拟代码

with mock.patch('dbconnect.cx_Oracle.connect') as mockOracle:

   result_set = {}
   mockOracle.cursor.callfunc.fetch_all = result_set

1 个答案:

答案 0 :(得分:0)

您实际上根本不需要“模拟”连接和光标!您可以简单地对连接进行子类化,然后自己动手,就像这样:

getState

我不确定这是否是您打算的内容,或者您​​是否知道这种可能性。使用此功能,您可以添加新功能,也可以覆盖或扩展现有功能。