Рубрики
Без рубрики

Тестирование регистратора

Регистрация иногда является частью ваших требований. Например, вы можете выдать предупреждение Anyt … Теги с Python, тестированием, TDD, регистрацией.

Регистрация иногда является частью ваших требований. Например, вы можете выдать Предупреждение В любое время происходит некоторое событие безопасности. Мне нравится проверять эти события, используя 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”