我在一個類中有兩個以下函數,我需要模擬數據庫連接和游標結果。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 回答

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
您實際上根本不必“模擬”連接和光標!您可以自己簡單地對連接和游標進行子類化,如下所示:
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
我不確定這是否是您的意圖,或者您是否知道這種可能性。有了它,您可以添加新功能,也可以覆蓋或擴展現有功能。
添加回答
舉報
0/150
提交
取消