Насмешка перед импортом модуля - PullRequest
5 голосов
/ 03 сентября 2011

Как мне патч и макет getLogger в тестируемом модуле (MUT):

# Start of the module under test
import logging
log = logging.getLogger('some_logger')
# ...

Я бы хотел сделать:

mock_logging.getLogger.return_value = Mock()

Однако я не могу создать mock_logging до импорта MUT, но импорт MUT уже вызывает getLogger ...

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Для этого потребуется импортировать модуль без его предварительного выполнения, что, к сожалению, для вас не будет работать , если вы не сделаете несколько хитроумных хаков, таких как изменение дерева разбора для модуля, но вы, вероятно, не хотите чтобы сделать это либо.

То, что вы могли бы сделать, это изменить эти ссылки времени импорта после импорта и заменить их вручную на mock-объекты или повторно выполнить операторы после установки вашего mock-объекта, хотя я знаю, что это ограниченное использование.

0 голосов
/ 24 июля 2017

Это можно сделать, импортировав и исправив сначала logging.getLogger, а затем импортировав mut

import unittest
from unittest import mock

import logging
with mock.patch('logging.getLogger') as mock_method:
    import mut
mock_method.assert_called_once_with('some_logger')
...