2013-12-11 4 views
1

제 제목은 매우 설명 적이지만 여기에 나와 있습니다. 이 설정이 있다고 가정합니다.파이썬 테스트 케이스에서 기본 클래스 비헤이비어를 조롱해야합니다.

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() 

이제 파생 클래스를 테스트하는 상황이 있습니다. 그렇지만 그렇게 할 때 기본 클래스 메서드가 호출되도록해야합니다. 나는

AttributeError: 'super' object has no attribute 'base_function' 

내가 슈퍼 뭔가 잘못하고 있어요 알고 있기 때문에, 사람이 생각이 나는이 설정이 잘못 100 % 확신이

from mock import MagicMock 

d = DerivedClass() 
super(DerivedClass, d).base_function = MagicMock() 
d.advanced_function() 
super(DerivedClass, d).base_function.assert_called() 

같은 일을 시도?

+0

'super'가 아닌'BaseClass.base_function'에 직접 접근 해 보셨습니까? – jonrsharpe

+0

이것은 작동합니다. 왜? 클래스의 특정 인스턴스를 사용해야한다고 생각했습니다. BaseClass.base_function을 MagicMock과 동일하게 설정하면 파생 된 모든 인스턴스가 조롱을 당하게됩니다. 이 모든 것을 설명하는 링크가 있다면 많은 도움이됩니다. – Zack

답변

1

BaseClass.base_function을 통한 액세스 인스턴스가 작성되면

id(BaseClass.base_function) == id(DerivedClass.base_function) 

, 그들은 모의를 상속 : 당신이 방법을 과부하가 걸리지 않기 때문에, 당신은 단지 그것을 상속의 DerivedClass.base_function는 같은 객체입니다.

관련 문제