Я хочу смоделировать создание объекта, чтобы возвращаемый объект был объектом MagicMock.Мои файлы структурированы так:
home_folder
|
|-namespace
| |-Class1.py
| |-Class2.py
|
|-tests
|-unit_tests
|-test_Class2.py
Содержимое Class1.py:
class Class1:
... class members ...
Содержимое Class2.py:
from Class1 import Class1
class Class2(Class1):
classMethod(self):
objInst = Class1()
... some logic ...
return objInst
Содержимое test_class2.py:
from unittest import TestCase
from Class1 import Class1
from Class2 import Class2
from unittest.mock import patch, MagicMock
class TestClass2(TestCase):
@patch("namespace.Class2.Class1")
def test_classMethod(self, mock_class1):
cl2Obj = Class2()
cl1Obj = MagicMock(Class1())
mock_class1.return_value = cl1Obj
r = cl2Obj.classMethod()
self.assertEqual(cl1Obj, r)
Запуск этого теста дает мне:
<Class1.Class1 object at 0xnum> != <MagicMock name='Class1()' spec='Class1' id=num>
Я пытался использовать
@patch("namespace.Class1.Class1")
, но это не помогло,Попытка
mock_class1.__init__.return_value = cl1Obj
выдает ошибку, говорящую
Attribute Error: 'method' object has no attribute 'return_value'
Как мне насмехаться над objInst = Class1 (), чтобы objInst заканчивал тем, что держал объект MagicMock?