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



我有以下记录器设置:

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)

这将延迟文件的创建,直到一些内容被写入其中

最新更新