Обработчик макетов в модульном тесте - PullRequest
0 голосов
/ 26 октября 2018

У меня есть следующие настройки логгера:

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 голосов
/ 12 марта 2019

Проблема в вашем случае в том, что пустой файл 'foo.log' уже создан в тот момент, когда строка

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

выполнено. Вы можете избежать этого, добавив аргумент delay:

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

, который задержит создание файла до тех пор, пока в него не будет записано некоторое содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...