2016-04-23 94 views
3

所以,主要問題在標題上。我試圖找出python mock模塊是否使用依賴注入模式來模擬對象調用是否正確。python模擬模塊是否通過依賴注入工作?

我不熟悉DI模式,但是從我讀過的和我在調試器中看到的mock模塊發行版看起來像mock()使用DI。

我是對的,模擬()是DI還是我錯過了這種模式和嘲諷?

回答

2

mock模塊不使用依賴注入。

mock用自定義的替換一些對象。

要使用依賴注入,必須有一些頂級進程,它將搜索要調用的函數,檢測到的參數傳遞給它們,實例化它們並最終進行調用。

mock只修改對象,並且按照慣例完成對這個對象的調用 - 直接調用該對象。

如果你想找到依賴注入的例子,請檢查pytest及其固定裝置 - 它們使用它很多,使用它很有趣。

+0

謝謝!那麼,看起來像模擬使用了一些「monkeypatching」方法? – Paul

+1

@保羅是的,你是對的。 –

0

我想你主要關心的是用unittest.mock.patch來嘲諷一個對象的屬性。

patch是一個函數,它只是返回類unittest.mock._patch的一個實例。 _patch是一個上下文管理器,它通過__enter__ monkeypatches屬性,並在__exit__上修改它。