2013-09-19 7 views
9

Я этот код, который я хочу, чтобы тест:Как я могу исправить/макет logging.getlogger()

log = logging.getLogger(__name__) 


class A(object): 
    def __init__(self): 
     log.debug('Init') 

, но я не могу понять, как утверждать, что log.debug была вызвана «Init»

Я пробовал патч-регистратор, но, проверяя его, я нашел только макет getLogger.

Я уверен, что он прост, но я просто не могу его изобразить!

Заранее благодарим за любую помощь!

+0

Что насмехаясь библиотека вы используете? –

+0

Я на Python 3.3, так unittest.mock –

ответ

14

Предполагая log является глобальным переменной в модуле mymod, вы хотите, чтобы дразнить фактический экземпляр, getLogger возвращенного, что и вызывает debug. Затем вы можете проверить, был ли вызван log.debug с правильным аргументом.

with mock.patch('mymod.log') as log_mock: 
    # test code 
    log_mock.debug.assert_called_with('Init') 
+1

Не могу поверить, что это было так просто, просто то, что я искал. Спасибо за быстрый ответ тоже! –

11

Альтернативное решение, которое позволяет убедиться, что вы используете правильный регистратор тоже:

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') 
+1

Это должен быть принятый ответ. – physicalattraction

Смежные вопросы