Python 单元测试中的模拟日志处理程序

Python 单元测试中的模拟日志处理程序,python,unit-testing,Python,Unit Testing,我有以下记录器设置: 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 = 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

在您的情况下,问题是,在该行中已经创建了空文件“foo.log”

file_handler = logging.FileHandler('foo.log')
被执行。可以通过添加
delay
参数来避免这种情况:

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

这将延迟文件的创建,直到写入某些内容。

lifesaver。。。真不敢相信我花了多长时间才找到这个。此外,我将其设置为loglevel不会在我的测试中使用
logging.disable(logging.CRITICAL)