如何使用补丁d模拟Django内部库

2024-05-16 12:59:58 发布

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

我正在模拟python的一个内部库类(服务器),它提供到HTTPJSON-RPC服务器的连接。但是当运行测试时,类不是在嘲笑。该类用于调用一个项目类,该项目类是有效实例化服务器类的其他类的包装器。你知道吗

我在这里提取代码的部分,让我所说的有意义。你知道吗

单元测试:

@patch('jsonrpc_requests.jsonrpc.Server')
def test_get_question_properties(self, mockServer):
    lime_survey = Questionnaires()
    # ...

课堂调查问卷

class Questionnaires(ABCSearchEngine):
    """ Wrapper class for LimeSurvey API"""

    def get_question_properties(self, question_id, language):
        return super(Questionnaires, self).get_question_properties(question_id, language)

类从类ABCSearchEnginge(ABC)调用方法get_question_properties。这个类初始化Server类以提供到外部API的连接。你知道吗

ABCSearchEnginge类

class ABCSearchEngine(ABC):
    session_key = None
    server = None

    def __init__(self):
        self.get_session_key()

    def get_session_key(self):
        # HERE the self.server keep getting real Server class instead the mocked one
        self.server = Server(
            settings.LIMESURVEY['URL_API'] + '/index.php/admin/remotecontrol')

既然测试是模仿服务器类,为什么它不是模仿?缺了什么零件?你知道吗


Tags: 项目keyself服务器apigetserversession
1条回答
网友
1楼 · 发布于 2024-05-16 12:59:58

据我所知,您没有添加返回值。你知道吗

你把模拟值放在:@patch('jsonrpc_requests.jsonrpc.Server')了吗?你知道吗

如果您尝试添加MagicMock,会发生什么(不要忘记添加from mock import patch, MagicMock)?你知道吗

@patch('jsonrpc_requests.Server', MagicMock('RETURN VALUE HERE'))

您还需要模拟__init__方法(其中Server就是这个from jsonrpc_requests import Server):

@patch.object(Server, '__init__', MagicMock(return_value=None))

我根据自己的理解推断出你的问题,也许你需要修正一些路径(Mock需要确切的路径来完成这项工作)。你知道吗

相关问题 更多 >