我正在测试一些使用 Amazon 的 pysqld
库的代码。其中一个函数是 execute_lambda
,它接受一个 lambda 作为参数(这是一个事务,您可以传递一些要执行的函数)。
我正在尝试模拟此调用,但我无法确定参数。让我们看一个例子:
with session() as s:
s.execute_lamda(lambda x: function(param1, param2))
当我去参加测试并检查模拟调用时:
(Pdb) self.mocks["pyqldb"]["mock"]().get_session().__enter__().execute_lambda.mock_calls
[call(<function init_schema.<locals>.<lambda> at 0x7fd80c97a4d0>, <function init_schema.<locals>.<lambda> at 0x7fd80c97a200>),
call(<function init_schema.<locals>.<lambda> at 0x7fd80c97a5f0>, <function init_schema.<locals>.<lambda> at 0x7fd80c97a680>),
call(<function init_schema.<locals>.<lambda> at 0x7fd80c97a7a0>, <function init_schema.<locals>.<lambda> at 0x7fd80c97a710>),
call(<function init_schema.<locals>.<lambda> at 0x7fd80c97a8c0>, <function init_schema.<locals>.<lambda> at 0x7fd80c97a830>),
call(<function init_schema.<locals>.<lambda> at 0x7fd80c97a9e0>, <function init_schema.<locals>.<lambda> at 0x7fd80c97a950>),
call(<function init_schema.<locals>.<lambda> at 0x7fd80c97ab00>, <function init_schema.<locals>.<lambda> at 0x7fd80c97aa70>),
call().__next__(),
call().__next__().__str__()]
我如何去每个调用并检查 lambda 的参数?
最佳答案
您可以使用 call_args_list获取所有带有 args 的调用。
....execute_lambda.call_args_list
例子
>>> mock = Mock(return_value=None)
>>> mock()
>>> mock(3, 4)
>>> mock(key='fish', next='w00t!')
>>> mock.call_args_list
[call(), call(3, 4), call(key='fish', next='w00t!')]
>>> expected = [(), ((3, 4),), ({'key': 'fish', 'next': 'w00t!'},)]
>>> mock.call_args_list == expected
是的 引用 - https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.call_args_list
关于python - 当函数使用 lambda 参数时如何使用模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63391486/