python - 当函数使用 lambda 参数时如何使用模拟

标签 python mocking

我正在测试一些使用 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/

相关文章:

c# - 具有只读 Prop 和内部构造函数的返回类型的模拟第三方接口(interface)

python - PyTest:修补使用 'importlib.import_module()' 导入模块的方法

java - 是否有任何适用于 Java 的假文件系统框架?

php - 如何在 PHP 单元测试中模拟在构造函数中调用的方法?

python - json.loads() 解析从 node.js 接收的 JSON 对象时给出 UnicodeEncodeError

Python 值错误 : too many values to unpack with glob

c# - 为更新功能设置模拟(CRUD)

python - 如何在数组上使用 multiprocessing.Pool?

python - Python 中的 R Shiny 等效项?创建基于窗口的工具

python - pandas .apply args 自动解压列表?