Я пытаюсь написать несколько тестовых примеров для следующего метода как часть модели под названием 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
, что было моей целью в исходном тесте.