Как проверить обработчик, используемый для записи журнала?
Я пишу функциональные тесты для моего приложения Python. Я использую стандартный пакет ведения журнала Python в тестируемом коде. В моих модульных тестах я высмеял пакет ведения журнала, но для функциональных тестов я хотел бы проверить 2 вещи:
- журналы в правильном формате - этот я могу проверить в порядке -
- журналы отправляются в stdout-вот где я немного потерялся -
Я могу записывать журналы и проверять правильность сообщений. Вот код, которым я являюсь использование:
with assertLogs('', level='INFO') as captured_logs:
do_something()
assertEqual(captured_logs.records[0].msg, "expected message")
Это работает нормально, но я только тестирую свою точку зрения 1, журналы создаются и сообщения, как и ожидалось.
Мой вопрос заключается в том, как я могу проверить, что эти журналы действительно отправляются в stdout, а не в файл или stderr и т. д.?
Редактировать:
Примером кода для тестирования может быть
import logging
def do_something():
logging.warning("expected message")
Результатом тестирования этого кода будет то, что тест проходит, потому что сообщение, записанное в журнал, является ожидаемым. Но это пройдет независимо от того, если журнал переходит в файл, либо в sys.stdout
, либо в sys.stderr
... Мой вопрос будет заключаться в том, что мне нужно добавить в тестовый код, чтобы убедиться, что тест проходит только тогда, когда сообщение журнала отправляется в stdout
Спасибо!!
1 ответ:
Вы проверяете обработчики корневого регистратора, чтобы убедиться, что
StreamHandler
(который является обработчиком, входящим в консоль) является его единственным регистратором.Например:
from logging import getLogger, StreamHandler root_logger = getLogger('') assert len(root_logger.handlers) == 1 assert isinstance(root_logger.handlers[0], StreamHandler)