Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何强制MagicMock复制函数签名?_Python_Testing_Pytest_Python Unittest - Fatal编程技术网

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

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(

我想为测试主题(其他函数)模拟几个不重要的函数-time.sleep()等等

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

有没有办法说mock‘如果参数列表与给定函数不同,则引发异常’

我想模拟的函数示例:

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需要两个参数),但它很乐意接受一个参数。哦,我的错误。非常感谢。