Регистрация иногда является частью ваших требований. Например, вы можете выдать Предупреждение
В любое время происходит некоторое событие безопасности. Мне нравится проверять эти события, используя TestingLogger
Класс, который может стоять вместо настоящего регистратора.
Во-первых, сделайте ваши параметры регистраторов в свои функции и классы. Глобалы делают тестирование сложно.
class Example: def __init__(self, logger): self._logger = logger def do_something(self): self._logger.info("Logged something!")
def example(logger): logger.info("Logged something!")
Теперь вы можете использовать TestingLogger
во время испытаний. Если это доводы, как утка, ее утка. Давайте сделаем TestingLogger
это кряки, как логин.
class TestingLogger: def __init__(self): self.messages = [] def debug(self, message): self._log(message) def info(self, message): self._log(message) def warning(self, message): self._log(message) def error(self, message): self._log(message) def critical(self, message): self._log(message) def exception(self, message): self._log(message) def _log(self, message): self.messages.append(message)
Этот класс реализует методы, которые вы будете называть 99% времени против регистратора. Вместо того, чтобы входить в систему, он будет захватывать сообщения в Сообщения
список. Вы можете сделать утверждения против этого списка в ваших тестах.
def test_example_function(): logger = TestingLogger() example(logger) assert "Logged something!" == logger.messages[0] def test_example_class(): logger = TestingLogger() Example(logger).do_something() assert "Logged something!" == logger.messages[0]
Вы можете расширить эту идею во многих отношениях:
- Захватите уровень журнала, если вам нужно утверждать на них.
- Наследовать от
Список
и использоватьSelf.append
захватывать журналы. Затем вы можете сделать утверждения против тестирования Logger напрямую вместоlogger.messages
Отказ - Захватить
ул ...| Значение исключений вместо экземпляров в
Testinglogger.exceptionОтказ
Если прохождение регистраторов в качестве параметров является громоздким, вы можете создать по умолчанию, когда кто-то не указан, предоставляя вам гибкость в тестах и удобствах в остальных местах.
Если вы хотите узнать больше об этом стиле тестирования, проверьте Питонская архитектура книга . Это одна из лучших программных книг, которые я прочитал за долгое время.
Как ассортимент Amazon, я зарабатываю от квалификационных покупок
Оригинал: “https://dev.to/wilbertom/testing-logger-2i63”