Tôi có đoạn mã này trong python2:Làm thế nào để giả lập đối tượng con trỏ psycopg2?
def super_cool_method():
con = psycopg2.connect(**connection_stuff)
cur = con.cursor(cursor_factory=DictCursor)
cur.execute("Super duper SQL query")
rows = cur.fetchall()
for row in rows:
# do some data manipulation on row
return rows
mà tôi muốn viết một số unittests cho. Tôi đang tự hỏi làm thế nào để sử dụng mock.patch
để vá ra các con trỏ và các biến kết nối để họ trở về một tập hợp giả của dữ liệu? Tôi đã thử các phân đoạn sau của mã cho unittests của tôi, nhưng không có kết quả:
@mock.patch("psycopg2.connect")
@mock.patch("psycopg2.extensions.cursor.fetchall")
def test_super_awesome_stuff(self, a, b):
testing = super_cool_method()
Nhưng tôi dường như nhận được lỗi sau:
TypeError: can't set attributes of built-in/extension type 'psycopg2.extensions.cursor'
Điều này không hiệu quả đối với tôi. Kết quả tôi nhận được từ fetchall là '' –
@AllenLin Đó là vì tôi không định cấu hình giá trị trả về cho 'fetchall', chỉ 'thực thi'. – chepner
cursor.execute thường trả về None. Tại sao bạn sẽ cấu hình một giá trị trả về cho thực thi nhưng không phải là fetchall? –