Python 函数使用lambda参数时如何使用mock

Python 函数使用lambda参数时如何使用mock,python,mocking,Python,Mocking,我正在测试一些使用来自Amazon的pysqld库的代码。其中一个函数是execute_lambda,它接受lambda作为参数(这是一个事务,您可以传递一些要执行的函数) 我试着模仿这个电话,但我不能确定参数。让我们看一个例子: with session() as s: s.execute_lamda(lambda x: function(param1, param2)) 当我进行测试并检查模拟调用时: (Pdb) self.mocks["pyqldb"][&

我正在测试一些使用来自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__()]
(Pdb)self.mock[“pyqldb”][“mock”]()。获取会话()。\uuuu输入\ uuuu()。执行\ lambda.mock\调用
[致电(,),,
呼叫(,),
呼叫(,),
呼叫(,),
呼叫(,),
呼叫(,),
调用(),
调用()
如何转到每个调用并检查lambda的参数?

您可以使用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
真的 ref-

您可以使用获取所有带有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
真的
ref-

也许我的问题不清楚,很容易得到execute\u lambda args。问题是:从函数中获取参数后,如何获取lambda表达式的参数?也许我的问题不清楚,获取execute_lambda参数很容易。问题是:从函数中获取参数后,如何获取lambda表达式的参数?