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

哦,我的錯誤。謝謝。 –