Как я могу патч /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')