唯一可以使用的是模拟。
#tested.py
from somemodule import somelogger
class MyClass(object):
def __init__(self):
self.logger = somelogger()
def do_smth(self):
self.logger.log(message)
重要 详细信息:模块somemodule
不存在,因此@patch等常用解决方案不适用。
我需要模仿somemodule
somelogger's
方法log
才能执行简单的打印:
#tests.py
from tested import MyClass
def test_logging():
obj = MyClass()
obj.do_smth('some_message')
在控制台中:
some_message
答案 0 :(得分:0)
我认为这样做的方法是使用此处所述的unittest.mock.patch
方法:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch
在tests.py文件中,创建一个模拟的日志方法来进行打印。
# tests.py
from tested import MyClass
from unittest.mock import patch
def mocked_log(log_msg):
print(log_msg)
@patch('tested.somelogger.log')
def test_logging(mock_logger)
mock_logger.return_value = mocked_log
obj = MyClass()
obj.do_smth('some message')