如何在 Python 中模拟 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


Helenr
浏览 126回答 1
1回答

叮当猫咪

您实际上根本不必“模拟”连接和光标!您可以自己简单地对连接和游标进行子类化,如下所示:class MyConnection(cx_Oracle.Connection):&nbsp; &nbsp; def cursor(self, scrollable=False):&nbsp; &nbsp; &nbsp; &nbsp; return MyCursor(self, scrollable)class MyCursor(cx_Oracle.Cursor):&nbsp; &nbsp; def execute(self, sql, args):&nbsp; &nbsp; &nbsp; &nbsp; result = super(MyConnection, self).execute(sql, args)&nbsp; &nbsp; &nbsp; &nbsp; print("My mock execute...")&nbsp; &nbsp; &nbsp; &nbsp; return result我不确定这是否是您的意图,或者您是否知道这种可能性。有了它,您可以添加新功能,也可以覆盖或扩展现有功能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python