单元测试中的模拟记录处理程序

时间:2018-10-26 11:12:34

标签: 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.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

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,在该行的那一刻已经创建了空文件'foo.log'

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

被执行。您可以通过添加delay参数来避免这种情况:

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

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