2013-11-01 4 views
11

Java의 Mockito와 같은 다른 언어의 다른 조롱 라이브러리에 익숙하지만 파이썬의 mock 라이브러리는 내 인생을 혼란스럽게합니다.오브젝트에 대한 단일 메소드 만 조롱하기

나는 다음과 같은 클래스를 테스트하고 싶다. 내 테스트에서

class MyClassUnderTest(object): 

    def submethod(self, *args): 
     do_dangerous_things() 

    def main_method(self): 
     self.submethod("Nothing.") 

, 나는 main_method이 실행되었을 때 submethod가 호출되었는지 확인하고 싶습니다과는 오른쪽 인수로 호출되었다. 나는 위험한 일을하기 때문에 submethod을 실행하고 싶지 않습니다.

저는이 작업을 시작하는 방법에 대해 완전히 확신하지 않습니다. 모의의 문서는 믿기 어려울 정도로 이해하기 어렵습니다. 모의 조롱을하거나 조롱하는 방법을 모릅니다.

submethod 기능을 모의 할 수 있지만 main_method의 기능 만 남겨두고 있습니까?

답변

15

나는 당신을 위해 무엇을 찾고있는 것은 여기 mock.patch.object

with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked: 
    submethod_mocked.return_value = 13 
    MyClassUnderTest().main_method() 
    submethod_mocked.assert_called_once_with(user_id, 100, self.context, 
              self.account_type) 

입니다

patch.object(target, attribute, new=DEFAULT, 
       spec=None, create=False, spec_set=None, 
       autospec=None, new_callable=None, **kwargs) 

는 모의 객체와 객체 (대상)에 명명 된 멤버 (속성) 패치 작은 설명을 생각 .

+0

감사합니다. 저는 여러 가지 다른 '패치'방법을 모두 이해하고 사용하는 데 어려움을 겪었습니다. –

+0

확인. 나 한테 자유롭게 물어봐. – oleg