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

Geo*_*lin 5 python testing pytest python-unittest

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

我可以用简单的模拟替换它们,这会起作用。但是我希望它报告错误,如果它们被调用的参数数量不正确,没有命名参数等。

有什么办法可以说模拟“如果您的参数列表与给定函数不同,则引发异常”?

我想模拟的函数示例:

def mockme(arg1, arg2):
    pass
Run Code Online (Sandbox Code Playgroud)

我想要的是:

>>> 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)
Run Code Online (Sandbox Code Playgroud)

知道如何制作吗?

Mar*_* W. 8

看看unittest.mock.create_autospec,它应该完全符合你的要求

def some (a,b):
    pass

some_mock=mock.create_autospec(some)
some_mock(1)
Run Code Online (Sandbox Code Playgroud)