Нужно смоделировать поведение базового класса в тестовом примере 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)

Когда экземпляры созданы, они наследуют макет.

Другие вопросы по тегам