Нужно смоделировать поведение базового класса в тестовом примере Python
Мой заголовок довольно описательный, но здесь идет. Предположим, у меня есть эта настройка.
class BaseClass(object):
def __init__(self):
pass
def base_function(self, param="Hello World"):
print param
#multiple inheritance probably irrelevant but my problem deals with it
class DerivedClass(BaseClass, AnotherBaseClass):
def __init__(self):
pass
def advanced_function(self):
#blah blah blah
#code code code
self.base_function()
Теперь у меня есть ситуация, когда я тестирую производный класс, но при этом мне нужно убедиться, что его методы базового класса вызываются. Я пытался сделать что-то вроде этого
from mock import MagicMock
d = DerivedClass()
super(DerivedClass, d).base_function = MagicMock()
d.advanced_function()
super(DerivedClass, d).base_function.assert_called()
Я на 100% уверен, что эта настройка неверна, потому что
AttributeError: 'super' object has no attribute 'base_function'
Я знаю, что я делаю что-то не так с супер, у кого-нибудь есть идея?
1 ответ
Решение
Доступ через BaseClass.base_function
, Поскольку вы не перегружаете метод, вы просто наследуете его, DerivedClass.base_function
это тот же объект:
id(BaseClass.base_function) == id(DerivedClass.base_function)
Когда экземпляры созданы, они наследуют макет.