2014-02-27 80 views
1

是否有可能在Python中創建一個「愚蠢的」虛擬對象,它總是無操作並永遠不會拋出錯誤,無論如何調用或以其他方式操作?Python中的虛擬對象

的應用案例,這是當有用來創建在正常情況下的副作用的對象,但如果運行在不同的環境(假設,在開發過程中)不應該做任何事情,靜靜地失敗。

try: 
    o = Obj() 
except ImportError: 
    # we're in development mode 
    o = DummyObj() 

o.doStuff() # should work or fail silently 

回答

6

嘗試使用Mock對象。在Mock對象上進行的任何呼叫都會返回另一個Mock對象。

例如:

>>> from mock import Mock 
>>> test = Mock() 
>>> test.doStuff() 
<Mock name='mock.doStuff()' id='4373729360'> 
>>> test2 = test.doStuff 
>>> test2 
<Mock name='mock.doStuff' id='4373693712'> 
>>> test2() 
<Mock name='mock.doStuff()' id='4373729360'> 

如圖所示,這是一致的 - 調用doStuff()多次返回相同Mock,如果你調用Mock創建由mock.doStuff它會返回相同MockdoStuff()

模擬對象通常在單元測試中使用,所以你可以用它們做的事情比我在這裏展示的要多得多。如果您有興趣,請閱讀更多here

+0

是的,這就是我一直在尋找的:)我認爲有一個簡單的方法可以在不使用'mock'的情況下完成這個任務,但是這種方法需要處理每一個場景。謝謝! –

+1

請勿在生產中使用模擬! – holdenweb