2017-03-06 1 views
1

그래서 파이썬 프로젝트에 대한 단위 테스트를 작성 중이며 외부 API에 대한 응답을 모의하고 싶습니다.Python 요청 - 모의 상태 코드와 응답

내 코드는 다음과 같습니다

r = my_api_client.get(myurl) 

try: 
    if r.status_code == 200: 
     my_response = r.json() 
    elif r.status_code != 200: 
     print "bad status code" 
except Exception as e: 
    raise 

for x in my_response: 
    ... 

내 질문은 내가 my_api_client가 적절한 상태 코드와 JSON 개체를 반환 조롱 어떻게?

나는 다음과 같이

+0

['respond'] (https://github.com/getsentry/responses)에 대해 알고 있습니까? 그런 다음 실제로 엔드 포인트를 맞췄는지 확인할 수 있습니다. – jonrsharpe

답변

1

당신은 응답을 복잡한 모형을 작성할 수있는 모든 도움을 my_api_client = mock.Mock(return_value={'status_code':200, 'json_obj': {'blah':'blah'}})

덕분에 같은 일을 시도했습니다 :

ok_response_mock = mock.MagicMock() 
type(ok_response_mock).status_code = mock.PropertyMock(return_value=200) 
ok_response_mock.json.return_value = "{'blah':'blah'}" 

이것은 (하는 MagicMock를 생성 non-speficied 메소드를 요청할 때 불평하지 않음), 200을 리턴하는 status_code 특성을 추가합니다. JSON 문자열 응답을 .json() 메소드에 구성합니다. my_api_client이 시험 방법의 매개 변수 인 경우

그래서 :

my_api_client_mock = mock.MagicMock() 
my_api_client_mock.get.return_value = ok_response_mock 
YourModule.YourMethod(my_api_client_mock) 

이 이전에 생성 된 모의 응답으로 연결, 모의 매개 변수를 생성하고 테스트 메소드를 호출합니다. 이 모의에 가져온 모듈을 자동으로 생성 및 테스트 방법에 대한 인수로 배치를 패치합니다

@mock.patch('MyModuleUnderTest.my_api_client') 
def test_MyMethodUnderTest__response_ok__stuff_happens(self, api_client_mock): 
    # code to create ok_response_mock 
    api_client_mock.get.return_value = ok_response_mock 

: 경우, 대신, my_api_client 가져온 모듈입니다. 그냥 조롱 한 응답을 조롱하는 사람에게 말하십시오.