我在测试模块(MUT)中如何patch and mock getLogger
:
# Start of the module under test
import logging
log = logging.getLogger('some_logger')
# ...
我想这样做:
mock_logging.getLogger.return_value = Mock()
但是在导入MUT之前我无法创建mock_logging
,但是导入MUT已经调用getLogger
...
答案 0 :(得分:2)
这需要先导入模块而不先执行它,不幸的是你won't work,除非你做一些花哨的黑客攻击,比如修改模块的解析树,但你可能也不想这样做。
您可以做的是在导入后修改这些导入时引用,并通过模拟对象手动替换它们,或者在安装模拟对象后重新执行语句,但我知道,这个用途有限。 / p>
答案 1 :(得分:0)
这可以通过先导入和修补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')