Python模拟修补程序实例方法和检查调用参数

2024-05-10 08:57:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python 2.7中使用Mock(http://mock.readthedocs.org/en/latest/)库。我有一个主函数,它调用了一些我正在尝试测试的其他函数。

它调用的其他函数是其他实例方法(例如,def _other_function(self, a, b))。

我正在调用我的主函数,它调用的其他函数已修补。我刚刚在补丁中添加了autospec=True。但是,当我检查调用参数时,它会显示一个self参数(如预期的那样):

python2.7> _other_function_mock.call_args_list
[call(<some.module.class.method object at 0x9acab90>, 1, 2)]

在设置autospec=True之前,它只显示我实际传递的参数(1和2)。因为现在调用参数显示了对self的引用,所以我不能只调用mock_object.assert_any_call(1, 2)。我需要从mock_object.call_args_list中选择参数并进行比较。

有没有办法仍然调用mock.assert_any_call而不必手动挑选参数来检查传递的参数是否正确?

或者有没有更好的方法来修补实例方法?


Tags: 实例方法函数selftrue参数objectargs
1条回答
网友
1楼 · 发布于 2024-05-10 08:57:50

实际上,有两种方法可以围绕self引用来播放autospec=True补丁。

  1. 使用^{}忽略第一个参数
  2. 通过patch.object而不是修补静态方法引用来修补对象。

无论如何,不能在所有情况下使用2有时不能在测试方法上下文中使用对象实例;此外,这种方式通常会使测试变得不那么清晰和复杂。我总是喜欢在测试中使用1

@patch("my_module.MyClass.my_method", autospec=True)
def test_my_test(self, mock_my_method):
    my_module.MyClass().my_method(1,2)
    mock_my_method.assert_any_call(mock.ANY, 1, 2)

相关问题 更多 >