Python 如何强制MagicMock复制函数签名?
我想为测试主题(其他函数)模拟几个不重要的函数-time.sleep()等等 我可以用简单的mock来替换它们,这将起作用。但是我希望它报告错误,如果调用它们的参数数量不正确,没有命名参数,等等 有没有办法说mock‘如果参数列表与给定函数不同,则引发异常’ 我想模拟的函数示例:Python 如何强制MagicMock复制函数签名?,python,testing,pytest,python-unittest,Python,Testing,Pytest,Python Unittest,我想为测试主题(其他函数)模拟几个不重要的函数-time.sleep()等等 我可以用简单的mock来替换它们,这将起作用。但是我希望它报告错误,如果调用它们的参数数量不正确,没有命名参数,等等 有没有办法说mock‘如果参数列表与给定函数不同,则引发异常’ 我想模拟的函数示例: def mockme(arg1, arg2): pass 我想要的是: >>> m = mock.CallableMock(signature=mockme) >>> m(
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)
>m=mock.CallableMock(signature=mockme)
>>>m(1,2)
>>>m(1,2,3)
TypeError:只接受2个参数(给定3个)
你知道怎么做吗?看看unittest.mock.create\u autospec,它应该完全满足你的需要
def some (a,b):
pass
some_mock=mock.create_autospec(some)
some_mock(1)
将mock的
call_args
与您希望调用它的参数列表进行比较不是更好吗?是的,这是可能的,但如果有很多调用,则非常烦人。它不会抱怨错误的参数mock.create\u autospec(os.path.split)(1)
。应该抱怨(split需要两个参数),但它很乐意接受一个参数。哦,我的错误。非常感谢。