2013-01-20 50 views
3

我想創建一個mock.Mock()對象,然後添加一個名爲session的方法,該方法的作用類似於實例方法,該方法將self引用傳遞給模擬對象,從而允許該方法向模擬對象添加狀態。這是可能的(沒有手動使用types.MethodType,例如使用mock的內置API),還是應該找到解決方法?我可以將實例方法添加到Python「模擬」對象嗎?

請注意,我發現this question,這是用於Ruby,似乎涵蓋了類似的東西,如果不是相同的東西。不幸的是,我根本不瞭解Ruby。

回答

3

如果您想要增強mock.Mock類的功能,只需子類Mock並添加您自己的方法。

class MyMock(Mock): 
    def session(self): 
     # Save session data here? 

的模擬documentation解釋說,當一個新的模擬是要建立,這將是相同的類型父。這意味着session函數也可以在模擬期間創建的任何其他模擬中使用。

這並不包括您需要將session函數動態附加到現有模擬對象的情況。

+0

謝謝,這實際上工作正常。雖然模仿父母部分的子類在我的情況下並不有用,但它不會傷害任何東西。 – orokusaki

1
mock_answer = Mock() 

def session(): 
    mock_answer.b = 1 

mock_answer.session = session 
mock_answer.session() 
print(mock_answer.b) # 1 

實際上並不需要self

+1

但如果你需要使用self,你可以使用partial:'from functools import partial',然後''mock_answer.session = partial(session,mock_answer)'' – Matt

相關問題