我正在尝试模拟返回列表的方法。设置后return_value
,它仍然返回一个 Mock 对象而不是列表,所以我不能迭代那个对象。
我要测试的功能示例:
def func(db_engine):
query = f"SELECT * FROM table"
query_result = db_engine.execute(query).fetchall()
extracted_val = []
for res in query_result:
extracted_val.append(res[1])
return extracted_val
测试示例:
def test_fun():
query = MagicMock()
query_res = [("name_1", "value_1"), ("name_2", "value_2")]
expected_vals = ["value_1", "value_2"]
db_engine = MagicMock()
db_engine.execute(query).fetchall().return_value = query_res
vals = func(db_engine)
assert expected_vals == vals
总之,db_engine.execute(query).fetchall()
必须返回列表,所以我可以迭代query_result
,但它不会发生。尽管在attributequery_result
中有正确的值return_value
,但我无法对其进行迭代。