簡體   English   中英

單元測試中的模擬記錄處理程序

[英]Mock logging handler in unit test

我有以下記錄器設置:

logger = logging.getLogger(__name__)
logger.setLevel(logging.ERROR)
file_handler = logging.FileHandler('foo.log')
formatter = logging.Formatter('%(asctime)s: %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

在單元測試期間,如何停止記錄器將記錄實際寫入磁盤? 我目前正在檢查logger.error的調用方式如下:

@mock.patch('mymodule.logger')
def test_error_is_logged(self, mock_logger):
    mymodule.func() # this causes an error to be logged
    self.assertTrue(mock_logger.error.called)

上面的測試可以正常工作,但是我要避免在磁盤上創建日志文件foo.log 我想知道的是在logger.error文件創建時是否調用logger.error

您遇到的問題是,在該行的那一刻已經創建了空文件'foo.log'

file_handler = logging.FileHandler('foo.log')

被執行。 您可以通過添加delay參數來避免這種情況:

file_handler = logging.FileHandler('foo.log', delay=True)

這將延遲文件的創建,直到將某些內容寫入文件為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM