Как я могу патч /mock logging.getlogger()
У меня есть этот код, который я хочу проверить:
log = logging.getLogger(__name__)
class A(object):
def __init__(self):
log.debug('Init')
но я не могу понять, как утверждать, что log.debug был вызван с помощью 'Init'
Я попробовал патч-регистратор, но, проверяя его, я нашел макет getLogger.
Я уверен, что это просто, но я просто не могу это понять!
Заранее благодарим за любую помощь!
Ответы
Ответ 1
Альтернативное решение, которое позволяет вам проверить, что вы используете правильный журнал:
logger = logging.getLogger('path.to.module.under.test')
with mock.patch.object(logger, 'debug') as mock_debug:
run_code_under_test()
mock_debug.assert_called_once_with('Init')
Ответ 2
Предполагая, что log
является глобальной переменной в модуле mymod
, вы хотите высмеять фактический экземпляр, возвращаемый getLogger
, что и вызывает debug
. Затем вы можете проверить, был ли вызван log.debug
с правильным аргументом.
with mock.patch('mymod.log') as log_mock:
# test code
log_mock.debug.assert_called_with('Init')
Ответ 3
Я опаздываю на этот вопрос, но есть и другой способ:
@patch('package_name.module_name.log')
def test_log_in_A(self, mocked_log):
a = A()
mocked_log.debug.assert_called_once_with('Init')