2014-07-14 2 views
0

나는 조롱 한 클래스 중 하나에서 테스트 값을 반환하는 메소드를 조롱하고 싶다. 내가 겪고있는 문제는 테스트 값을 반환하는 것이 아니라 조롱 된 메서드가 MagicMock 유형의 객체를 반환합니다.파이썬에서 클래스 객체 메소드의 반환을 조롱하다

코드는 꽤 고안되었지만 문제를 설명합니다.

SUT (sut.py) :

provider = None 


class Provider(): 
    def get_data(self): 
     return 'production data' 


def get_provider(): 
    return Provider() 


def setup_provider(): 
    global provider 
    provider = get_provider() 


def do_worker(): 
    return provider.get_data() 

시험 (mocking.py) :

sut.get_provider = MagicMock(name='get_provider').return_value = provider_mock 

그 할당 바인딩 : 당신은 당신의 체인 할당 혼동있어

import unittest 
from mock import MagicMock 
import sut 


class TestWorker(unittest.TestCase): 
    def test_worker(self): 
     provider_mock = MagicMock() 
     provider_mock.get_data.return_value = 'test data' 

     sut.get_provider = MagicMock(name='get_provider').return_value = provider_mock 

     sut.setup_provider() 

     data = sut.do_worker() 

     # data comes back as type MagicMock 
     assert data == 'test data' 

답변

1

provider_mock 모두 sut.get_provider to MagicMock(name='get_provider').return_value. 당신이 원하는 게 아니에요 그

sut.get_provider = provider_mock 
MagicMock(name='get_provider').return_value = provider_mock 

:

은 즉, 기본적으로이 작업을 수행합니다. 이제 sut.get_providerprovider_mock 개체를 호출하고 원래 provider_mock 개체가 아닌 새 MagicMock 개체를 반환합니다.

별도의 과제 :

sut.get_provider = MagicMock(name='get_provider') 
sut.get_provider.return_value = provider_mock 
+0

큰 감사 - 오른쪽 나는 두 선이 교차 얻고 있었다 - 나는 C# 및 자바 조롱 프레임 워크를 사용하여 많은 시간을 보냈습니다 - 아직 내 마음은 파이썬 감싸지고. – IUnknown

관련 문제