如何强制MagicMock复制功能签名?

时间:2016-12-06 17:03:27

标签: python testing pytest python-unittest

我想模拟一些不重要的测试主题函数(其他函数) - time.sleep()等。

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

如果你的参数列表与给定的函数不同,有没有办法说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)

知道如何制作这个吗?

1 个答案:

答案 0 :(得分:3)

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

def some (a,b):
    pass

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