Python模拟补丁实例方法和检查调用参数
我在Python2.7中使用Mock()库。我有一个main函数,它调用我正在测试的一些其他函数 它调用的其他函数是其他实例方法(例如,Python模拟补丁实例方法和检查调用参数,python,unit-testing,mocking,python-mock,Python,Unit Testing,Mocking,Python Mock,我在Python2.7中使用Mock()库。我有一个main函数,它调用我正在测试的一些其他函数 它调用的其他函数是其他实例方法(例如,def\u other\u函数(self,a,b)) 我正在调用我的主函数,它调用的其他函数也已修补。我刚刚在修补程序中添加了autospec=True。但是,当我检查调用参数时,它会显示一个self参数(如预期的那样): python2.7>\其他\函数\模拟调用\参数\列表 [呼叫(,1,2)] 在设置autospec=True之前,它只会显示我实际传递的
def\u other\u函数(self,a,b)
)
我正在调用我的主函数,它调用的其他函数也已修补。我刚刚在修补程序中添加了autospec=True
。但是,当我检查调用参数时,它会显示一个self
参数(如预期的那样):
python2.7>\其他\函数\模拟调用\参数\列表
[呼叫(,1,2)]
在设置autospec=True
之前,它只会显示我实际传递的参数(1和2)。由于现在调用参数显示对self
的引用,我不能只调用mock\u对象。断言任何调用(1,2)
。我需要从mock\u对象中选择参数。调用参数列表
并进行比较
是否有一种方法可以仍然调用mock.assert\u any\u调用
,而不必手动选择参数来检查传递的参数是否正确
或者,一般来说,我可以做些更好的事情来修补实例方法吗?基本上,有两种方法可以解决
autospec=True
修补程序的self
参考问题
Patch.object
修补对象,而不是修补静态方法引用@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)
@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)