Как смоделировать внутреннюю библиотеку Django с помощью патч-декоратора - PullRequest
0 голосов
/ 05 ноября 2018

Я издеваюсь над классом внутренней библиотеки (Сервер) python, который обеспечивает соединение с HTTP-сервером JSON-RPC. Но при запуске теста класс не издевается. Этот класс используется для вызова класса проекта, который является оберткой для другого класса, который эффективно создает экземпляр класса Server.

Я извлекаю здесь части кода, которые дают смысл для того, о чем я говорю.

Юнит тест :

@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)

Классовые анкеты вызывают метод get_question_properties из класса ABCSearchEnginge(ABC). Этот класс инициализирует класс 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')

Так как тест издевается над классом сервера, почему он не издевается? Что такое недостающие части?

1 Ответ

0 голосов
/ 05 ноября 2018

Из того, что я вижу, вы не добавили возвращаемое значение.

Были ли введены в макет значение: @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 нужен точный путь для выполнения работы).

...