如何确定是否使用PythonMock调用方法,但不替换函数体?

如何确定是否使用PythonMock调用方法,但不替换函数体?,python,python-mock,Python,Python Mock,有很多示例显示了如何使用Mock来断言已调用的方法,例如,assert\u调用了带(),但所有这些示例都涉及使用Mock实例替换该方法 我想要的是有一点不同,我想要函数在不替换其主体的情况下正常执行,但仍然想要断言函数是否已被调用 例如 def剂量计(…) #创建我稍后将测试的记录。 .... def execute(): .... dosomething() 在我的测试中 def测试a(…): 使用模拟的贴片(剂量计…): 执行() mocked.assert_用()调用_ 我知道我可以

有很多示例显示了如何使用Mock来断言已调用的方法,例如,
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
选项。