python - 如何在 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
解决方案
您实际上根本不必“模拟”连接和光标!您可以简单地自己子类化连接和游标,如下所示:
class MyConnection(cx_Oracle.Connection):
def cursor(self, scrollable=False):
return MyCursor(self, scrollable)
class MyCursor(cx_Oracle.Cursor):
def execute(self, sql, args):
result = super(MyConnection, self).execute(sql, args)
print("My mock execute...")
return result
我不确定这是否是您的意图,或者您是否知道这种可能性。有了它,您可以添加新功能,也可以覆盖或扩展现有功能。
推荐阅读
- json.net - 从 dotnet 发布输出文件夹运行应用程序时无法加载文件或程序集 Newtonsoft.Json
- java - 在网页上使用 Java 和 selenium 单击选项卡的最佳方法是什么?
- javascript - Vue响应式对象具有非空值,但输出值返回空
- c# - 在表格中获取最新版本并将它们放入列表中
- css - 将右侧的 2 行文本与左侧相同高度的图标对齐
- spring - 我可以将 Spring Data JPA 与 PostgreSQL 一起使用吗?
- react-native - react native - 在屏幕之间来回导航而不会丢失屏幕数据
- jestjs - 单元测试链式矩方法调用
- debian - How to force older debian to forget about DST Root CA X3 Expiration and use ISRG Root X1 - SSL certificate problem: certificate has expired
- pyspark - pyspark - 左连接,随机行匹配键