2010-11-24 65 views
1

有沒有辦法在單元測試中用模擬對象替換客戶端庫(它與遠程服務器通信)?圖解釋什麼,我試圖做用測試中的模擬替換客戶端庫?

+---------------+ 
    |  tests  |----{ mock } 
    +---------------+  | 
      |    | 
      v    | 
    +---------------+  | 
    |  model  |  | 
    +---------------+  | 
      |    | 
      v    | 
    +---------------+  | 
    | client-module |<--{replaces} 
    +---------------+ 
      ^
      : 
      : 
      v 
    +---------------+ 
    | service | 
    +---------------+ 

因爲測試導入模型,其中進口客戶端模塊

這裏,似乎沒有被應用模擬的方式到模型的內部。

回答

1

如果model.py做一個

import client_module 

,並在導入時不使用它的任何功能,你可以做

import model 

... 

model.client_module = MyMockModule() 

其中對於東西真正client_moduleMyMockModule返回適合嘲笑提供。我還沒有安裝/拆卸的東西來照顧這一點,但希望你的想法,

如果model並從client_module使用的東西在導入時,你需要用嘲笑模塊更換sys.modules['client_module']在導入之前model