2016-12-06 40 views
1

我想模拟几个不重要的功能为测试主题(其他功能) - time.sleep()等。如何强制MagicMock复制功能签名?

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

有没有办法说模仿'提出异常,如果你的参数列表不同于给定函数'?

的功能例子我想嘲笑:

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) 

不知道如何做呢?

+0

那岂不是更好地模仿你的'call_args'比较你希望它是参数列表叫什么名字? – lucasnadalutti

+0

是的,这是可能的,但非常烦人,如果有很多电话。 –

回答

2

看一看unittest.mock.create_autospec,应该做的正是你想要什么

def some (a,b): 
    pass 

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

它不会抱怨错误的参数。 'mock.create_autospec(os.path.split这样)(1)'。应该抱怨(分裂需要两个参数),但它很乐意接受一个参数。 –

+0

检查os.path.split的签名... –

+0

哦,我的错误。谢谢。 –