0

mock을 처음 사용했습니다. 파이썬 2.7.13.python 2.7 - 모의 테스트 방법을 알아낼 수 없습니다

내가이 라이브러리 주위에 래퍼를 짓고 있어요
차례로 모든 REST이 라이브러리를 소모 https://github.com/sendgrid/sendgrid-python/blob/master/sendgrid/sendgrid.py


https://github.com/sendgrid/python-http-client/blob/master/python_http_client/client.py

내 테스트 코드는

class TestSendgridUtils(unittest.TestCase): 
    def setUp(self): 
     self.sgsu = SubUser(api_key=RANDOM_API_KEY, hippo_user=RANDOM_USER_OBJ) 

    @patch('sendgrid.SendGridAPIClient') 
    @patch('python_http_client.Client') 
    def test_create(self, sgc_mock, http_client_mock): 
     self.sgsu.create() 
     expected_data = { 
      'email' : self.sgsu.sg_username 
     } 
     print http_client_mock.call_list() 
     sgc_mock.client.assert_called_with(request_body=expected_data) 

I과 같은 호출 기본적으로 HTTP 호출을하는 기본 라이브러리를 모의하려고합니다. 내 테스트는 sendgrid 모듈에 올바른 매개 변수를 전달하는 것입니다.

지금 테스트를 실행하면 HTTP 요청이 아직 만들어지고있어 의도 한 라이브러리를 조롱하지 못했다는 의미입니다.

모의 문서 읽기이 패치는 기본 클래스를 인스턴스화하는 경우에만 작동한다는 것을 이해합니다. 그러나 이것은 setUp()에 있어야 할 것입니다. 이것은 나의 테스트 케이스에서 나의 mock을 사용할 수 없다는 것을 의미할까요?

결과적으로이 인스턴스에서 모의 ​​사용 방법에 대한 가장 좋은 방법은 무엇인지 알 수 없습니다. 내가 조롱해야하는 경우 난 그냥 'sendgrid.SendGridAPIClient'또는 조롱 할 수있는 경우 나는 또한 알아낼 수 없습니다 'python_http_client.Client'

답변

0

당신이해야 당신이 예를 들어 (을 사용하고있는 모듈 patch 객체 app.py), 정의 된 위치가 아닙니다. 다음과 같아야합니다 patch-
그래서 전화 :

@patch('app.sendgrid.SendGridAPIClient') 

하지 :

@patch('sendgrid.SendGridAPIClient') 

또한 모의 객체의 주문이 일치하지 : 당신은이

@patch('sendgrid.SendGridAPIClient') 
@patch('python_http_client.Client') 
def test_create(self, sgc_mock, http_client_mock): 

중 하나를 스위치에 호출하기 patch 또는 스위치 메소드 인수. 이제 @patch('sendgrid.SendGridAPIClient')은에 해당합니다. 10 및 @patch('python_http_client.Client') 내지 sgc_mock.