我有以下记录器设置:
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)
这将延迟文件的创建,直到写入一些内容为止。
关于python - 单元测试中的模拟日志处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007488/