2017-05-26 71 views
1

我有一系列使用python logging module的單元/集成測試。我想測試正確的事情都記錄在適當的時候,我可以用mock模塊如下實現:Python嘲笑日誌記錄,同時保留日誌輸出

@mock.patch('logging.Logger.info') 

然而,當我這樣做實際的記錄停止這種(原因很明顯!)對我來說調試爲什麼我的測試正在工作等。

我的問題如下:有沒有一種方法,爲什麼我可以模擬日誌記錄調用,所以我可以斷言他們已被調用期望的參數,但仍然保持日誌功能?

我目前的做法是讓一個包裝類,它包含一個MagicMock和未嘲笑記錄:

class MonkeyPatchLogger(object): 
    MOCK = mock.MagicMock() 
    @classmethod 
    def info(cls, *args, **kwargs): 
     cls.MOCK(*args, **kwargs) 
     logger.info(*args, **kwargs) 

,但是這是行不通的。

乾杯, 傑克

回答

0

我在2010年發佈this單元測試和記錄 - 它應該仍然是相關的。這裏的內容太大而無法總結,因此提供了鏈接。

0

你應該看看這Mock(wraps=...)

包裝:項目爲模擬對象來包裝。如果wraps不是None,則調用Mock將把該調用傳遞給包裝對象(返回真實結果)。模擬上的屬性訪問將返回一個Mock對象,該對象封裝了包裝對象的相應屬性(因此試圖訪問不存在的屬性將引發AttributeError)。

如果模擬具有顯式的return_value設置,則調用不會傳遞給包裝的對象,而是返回return_value。