我正在為 python 腳本撰寫單元測驗。我正在使用 cx_Oracle 連接到 oracle DB,然后運行選擇查詢。該腳本根據查詢是否回傳任何行來執行不同的操作。我的代碼是這樣的:
import cx_Oracle
.
.
.
def main():
.
.
.
connection = cx_Oracle.connect(conn_string)
cursor = connection.cursor()
cursor.execute(query)
.
.
.
headers = [x[0] for x in cursor.description]
d_file = open(data_file, "w")
writer = csv.writer(d_file,delimiter='|',lineterminator="\n",quoting=csv.QUOTE_NONE)
writer.writerow(headers)
for row in cursor:
writer.writerow(row)
我想修補 cursor.execute() 方法以回傳 0 行。我通過參考 SO 上的幾個答案嘗試了以下操作。但我收到錯誤:
TypeError: Need a valid target to patch. You supplied: 'cx_Oracle'
我的測驗如下:
@mock.patch('cx_Oracle')
def test_invalid_data(self,mock_cx_Oracle):
print("Starting test : Test with data file having size < 100000")
mock_cursor = mock.MagicMock()
mock_cursor.execute.return_value = []
mock_cx_Oracle.connect.return_value.cursor.return_value.__enter__.return_value = mock_cursor
with self.assertRaises(SystemExit) as cm:
dump_intexdb_n_load.main()
self.assertEqual(cm.exception.code, 1)
如何模擬 cursor.execute()?
uj5u.com熱心網友回復:
您需要在使用物件的位置打補丁,因此如果您的測驗模塊被呼叫dump_intexdb_n_load.py,您應該打補丁dump_intexdb_n_load.cx_Oracle.connect。
在https://docs.python.org/3/library/unittest.mock.html#where-to-patch查看更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/518428.html
