Тестирование регистратора сообщений с unittest

Я хотел бы проверить сообщения регистратора, не выводя их на экран в моих тестах. Учитывая этот код:

 import logging
 logging.basicConfig(level=logging.ERROR)
 logger = logging.getLogger('test')
 logger.warning('this is a warning')

 # How do I see that there was a warning?

Как посмотреть записи в журнале, чтобы увидеть, что было предупреждение? Я не могу найти итератор в Logger, который бы сделал эту работу.

1 ответ

Решение

В этом случае вам может понадобиться использовать менеджер контекста TestCase.assertLogs.

Документация предоставляет довольно хороший пример того, что можно с этим сделать:

with self.assertLogs('foo', level='INFO') as cm:
   logging.getLogger('foo').info('first message')
   logging.getLogger('foo.bar').error('second message')
self.assertEqual(cm.output, ['INFO:foo:first message',
                             'ERROR:foo.bar:second message'])

Внутри контекстного менеджера вы можете получить доступ cm.records для списка LogRecord экземпляры или cm.output для списка отформатированных сообщений

Другие вопросы по тегам