2016-08-05 4 views
0

HTTP 요청을 호출하는 코드가 있고 404 응답에 대해 특정 예외를 발생시키는 부정적 사례를 단위 테스트하고 싶습니다. 그러나 호출 함수에서 부작용으로 HTTPError을 발생시킬 수 있도록 매개 변수를 모의하는 방법을 알아 내려고 노력 중이며 mock 개체는 받아 들일 수있는 매개 변수가 아닌 호출 가능한 함수를 만드는 것처럼 보입니다. 스칼라 값매개 변수를 조롱하는 파이썬

def scrape(variant_url): 
    try: 
     with urlopen(variant_url) as response: 
      doc = response.read() 
      sizes = scrape_sizes(doc) 
      price = scrape_price(doc) 
      return VariantInfo([], sizes, [], price) 

    except HTTPError as e: 
     if e.code == 404: 
      raise LookupError('Variant not found!') 

     raise e 

def test_scrape_negative(self): 
    with self.assertRaises(LookupError): 
     scrape('foo') 

답변

1

예외를 발생 시키려면 urlopen()을 모의 처리하십시오. 당신은 모의의 side_effect attribute을 설정함으로써 이것을 할 수 있습니다 :

with mock.patch('urlopen') as urlopen_mock: 
    urlopen_mock.side_effect = HTTPError('url', 404, 'msg', None, None) 
    with self.assertRaises(LookupError): 
     scrape('foo') 
+0

깔끔한! 고마워. –