如何确定是否使用PythonMock调用方法,但不替换函数体?
有很多示例显示了如何使用Mock来断言已调用的方法,例如,如何确定是否使用PythonMock调用方法,但不替换函数体?,python,python-mock,Python,Python Mock,有很多示例显示了如何使用Mock来断言已调用的方法,例如,assert\u调用了带(),但所有这些示例都涉及使用Mock实例替换该方法 我想要的是有一点不同,我想要函数在不替换其主体的情况下正常执行,但仍然想要断言函数是否已被调用 例如 def剂量计(…) #创建我稍后将测试的记录。 .... def execute(): .... dosomething() 在我的测试中 def测试a(…): 使用模拟的贴片(剂量计…): 执行() mocked.assert_用()调用_ 我知道我可以
assert\u调用了带()
,但所有这些示例都涉及使用Mock实例替换该方法
我想要的是有一点不同,我想要函数在不替换其主体的情况下正常执行,但仍然想要断言函数是否已被调用
例如
def剂量计(…)
#创建我稍后将测试的记录。
....
def execute():
....
dosomething()
在我的测试中
def测试a(…):
使用模拟的贴片(剂量计…):
执行()
mocked.assert_用()调用_
我知道我可以根据
dosomething()
创建的记录进行测试。是的,我同意,但我只是想知道是否有可能按照我的问题执行。使用Mock
的包装kwarg并将其传递给原始方法
比如说,
>>> from unittest import mock
>>> def hi(name): print('hi', name)
>>> mock_hi = mock.Mock(wraps=hi)
>>> with mock.patch('builtins.float', wraps=float) as mock_float:
... x = float('inf')
... print(x) # If we hadn't wrapped, x would be a mock.
... print(mock_float.call_args_list)
...
inf
[call('inf')]
包装函数由mock调用
>>> mock_hi('Bob')
hi Bob
但它仍然是一个能记住电话的模拟
>>> mock_hi.call_args_list
[call('Bob')]
回想一下,patch()
会将额外的Kwarg传递给它生成的Mock
,因此您也可以在这里使用wrapps
参数。比如说,
>>> from unittest import mock
>>> def hi(name): print('hi', name)
>>> mock_hi = mock.Mock(wraps=hi)
>>> with mock.patch('builtins.float', wraps=float) as mock_float:
... x = float('inf')
... print(x) # If we hadn't wrapped, x would be a mock.
... print(mock_float.call_args_list)
...
inf
[call('inf')]
可惜没有类似于autospec
的autowrap
选项。