我想創建一個mock.Mock()
對象,然後添加一個名爲session
的方法,該方法的作用類似於實例方法,該方法將self
引用傳遞給模擬對象,從而允許該方法向模擬對象添加狀態。這是可能的(沒有手動使用types.MethodType
,例如使用mock的內置API),還是應該找到解決方法?我可以將實例方法添加到Python「模擬」對象嗎?
請注意,我發現this question,這是用於Ruby,似乎涵蓋了類似的東西,如果不是相同的東西。不幸的是,我根本不瞭解Ruby。
我想創建一個mock.Mock()
對象,然後添加一個名爲session
的方法,該方法的作用類似於實例方法,該方法將self
引用傳遞給模擬對象,從而允許該方法向模擬對象添加狀態。這是可能的(沒有手動使用types.MethodType
,例如使用mock的內置API),還是應該找到解決方法?我可以將實例方法添加到Python「模擬」對象嗎?
請注意,我發現this question,這是用於Ruby,似乎涵蓋了類似的東西,如果不是相同的東西。不幸的是,我根本不瞭解Ruby。
如果您想要增強mock.Mock
類的功能,只需子類Mock
並添加您自己的方法。
class MyMock(Mock):
def session(self):
# Save session data here?
的模擬documentation解釋說,當一個新的模擬是要建立,這將是相同的類型父。這意味着session
函數也可以在模擬期間創建的任何其他模擬中使用。
這並不包括您需要將session
函數動態附加到現有模擬對象的情況。
mock_answer = Mock()
def session():
mock_answer.b = 1
mock_answer.session = session
mock_answer.session()
print(mock_answer.b) # 1
實際上並不需要self
。
但如果你需要使用self,你可以使用partial:'from functools import partial',然後''mock_answer.session = partial(session,mock_answer)'' – Matt
謝謝,這實際上工作正常。雖然模仿父母部分的子類在我的情況下並不有用,但它不會傷害任何東西。 – orokusaki