如何强制 MagicMock 复制函数签名?

How to force MagicMock to copy function signature?

我想为测试对象模拟一些不重要的函数(其他函数)- time.sleep() 等

我可以用简单的模拟替换它们,这会起作用。但我希望它在使用错误数量的参数调用时报告错误,没有命名参数等。

有什么办法可以说 mock 'raise exception if your argument list is different from given function'?

我想模拟的函数示例:

def mockme(arg1, arg2):
    pass

我想要的:

>>> m = mock.CallableMock(signature=mockme)
>>> m(1,2)
<MagicMock name='mockme()' id='140435553563920'>
>>> m(1,2,3)
TypeError: <MagicMock name='mockme()' id='140435553563920'> takes exactly 2 arguments (3 given)

知道怎么做吗?

看看 unittest.mock.create_autospec,那应该完全符合您的要求

def some (a,b):
    pass

some_mock=mock.create_autospec(some)
some_mock(1)