私がテストしたいこのコードがあります:
log = logging.getLogger(__name__)
class A(object):
def __init__(self):
log.debug('Init')
しかし、log.debugが「Init」で呼び出されたことをアサートする方法がわかりません
ロガーにパッチを当ててみましたが、検査したところ、getLoggerモックしか見つかりませんでした。
シンプルだと思いますが、理解できません。
助けてくれてありがとう!
正しいロガーも使用していることを確認できる代替ソリューション:
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')
log
がモジュールmymod
のグローバル変数であるとすると、getLogger
が返した実際のインスタンスをモックしたいと思います。これがdebug
を呼び出します。次に、log.debug
が正しい引数で呼び出されました。
with mock.patch('mymod.log') as log_mock:
# test code
log_mock.debug.assert_called_with('Init')
私はこの質問に遅れていますが、それを達成する別の方法は次のとおりです。
@patch('package_name.module_name.log')
def test_log_in_A(self, mocked_log):
a = A()
mocked_log.debug.assert_called_once_with('Init')