如何解决函数使用lambda参数时如何使用模拟
我正在测试一些使用来自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,),({'key': 'fish','next': 'w00t!'},)]
>>> mock.call_args_list == expected
真实 ref-https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.call_args_list
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。