Django похоже, не имитирует методы модели - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь написать несколько тестовых примеров для следующего метода как часть модели под названием Project:

    def get_mouse_model_designs(self):
        return {details.design.to_mouse_model()
                for details in self.strategies.all()}

Проблема, похоже, в details.design.to_mouse_model(), и я не могу точно высмеять это функция. Это тест, который у меня есть (self.details2 - единственная модель, связанная с проектом в этом тестовом примере, поэтому это будет единственная запись, возвращенная self.strategies.all()):

    def test_mouse_model_designs_one_design(self):
        mm_design = MagicMock()
        self.details2.design.to_mouse_model = MagicMock(return_value=mm_design)
        self.assertEqual(self.project2.get_mouse_model_designs(), {mm_design})

А вот Я получаю сообщение об ошибке:

AssertionError: Items in the first set but not the second:
<MouseModel.LabWork.DesignTask.DesignTask object at 0x0A4B0910>
Items in the second set but not the first:
<MagicMock id='172651760'>

Объект MouseModel.LabWork.DesignTask.DesignTask - это то, что возвращает метод to_mouse_model(). Но я высмеял это. Итак, из сообщения об ошибке я вижу, что на самом деле это не насмешка над методом to_mouse_model(). Я пытался утверждать, что метод был вызван, но это тоже не удается.

Однако, если я удалю to_mouse_model() в определении функции и обновлю тест, соответственно, он пройдет.

Любая помощь были бы признательны!

РЕДАКТИРОВАТЬ:

Я смог найти решение. Издеваясь над методом класса, а не над методом объекта:

@patch("LabWork.models.Design.to_mouse_model")
def test_mouse_model_designs_one_design(self, mock_design_mm):
    mm_design = MagicMock()
    mock_design_mm.return_value = mm_design
    self.assertEqual(self.project2.get_mouse_model_designs(), {mm_design})

Тем не менее, я все равно был бы открыт для альтернативного метода. Я думаю, что это несколько неудовлетворительно, потому что я могу только утверждать, что метод был вызван, но не то, что он был вызван специально для self.details2.design, что было моей целью в исходном тесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...