用方法替代者进行深度模拟

2024-06-28 19:01:03 发布

您现在位置:Python中文网/ 问答频道 /正文

唯一可以使用的是mock。在

#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不适用。在

我需要模拟somemodulesomelogger's方法log来执行简单的打印:

^{pr2}$

在控制台中:

some_message

Tags: frompyimportselflogmessageobjectdef
1条回答
网友
1楼 · 发布于 2024-06-28 19:01:03

我认为这样做的方法是使用unittest.mock.patch方法,如下所述:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch

在你的测试.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')

相关问题 更多 >