2016-08-05 68 views
0

我有一些调用HTTP请求的代码,我想单元测试一个负面情况,它应该为404响应引发特定异常。然而,我试图弄清楚如何模拟参数,以便在调用函数中引发HTTPError作为副作用,模拟对象似乎创建了一个可调用的函数,它不是它接受的参数,它只是标量值。Python嘲笑参数

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

整洁!感谢这工作 –