Я пытаюсь заменить функцию метода во время тестирования. Оригинальный метод сложен, поэтому я хочу использовать простую функцию для его замены в тестировании.
Я пытался использовать фиктивную библиотеку. Но похоже, что он только изменяет объект, непосредственно созданный в тестовом примере. Если некоторые другие функции внутри тестового примера вызывают метод, метод не будет заменен.
class1.py:
class Class1:
def foo(self):
#do a lot of calculation
return 1
class2.py:
from .class1 import Class1
class Class2:
def doo(self):
my_class1 = Class1()
return my_class1.foo()
test.py:
import mock
from .class1 import Class1
from .class2 import Class2
class Class1:
def foo(self):
# no calculation
return 2
@mock.patch.object(Class1, "foo")
def test_case(mock):
my_class2 = Class2()
assert my_class2.doo() == 2
Я пытаюсь заменить foo () внутри Class1 новым foo (), созданным в test.py. Но поскольку объект Class1 создается внутри объекта Class2, метод не заменяется таким образом.