我试图模拟psycopg2,需要处理cursor.description
# run query 1
column_names = [desc[0] for desc in cursor.description]
# run query 2
# NB cursor.description now returns different value
column_names = [desc[0] for desc in cursor.description]
我可以通过PropertyMock执行此操作:
type(fake_cursor).description = PropertyMock(return_value=descriptions[0])
但这并不能解决我的问题,因为测试中的系统执行两次查询,并且第二次的描述将不同
如何在第二次调用时更改模拟的返回值
我试过:
cursor_execute_call_count = 0
def handle_cursor_execute(arg1, arg2):
cursor_execute_call_count = cursor_execute_call_count + 1
type(fake_cursor).description = PropertyMock(return_value=descriptions[cursor_execute_call_count])
fake_cursor.execute = Mock(side_effect=handle_cursor_execute)
但我明白了
E UnboundLocalError: local variable 'cursor_execute_call_count' referenced before assignment
(这对我来说毫无意义。一定有一个奇怪的范围界定问题。)
我最终使用了这段代码,但似乎有更好的方法:
def handle_cursor_execute(arg1, arg2):
description = descriptions.pop()
type(fake_cursor).description = PropertyMock(return_value=description)
根据澄清进行编辑:
我想您可以实现一个迭代器:
所以它看起来是这样的:
相关问题 更多 >
编程相关推荐