2016-08-05 32 views
0

Ich habe einige Code, der eine HTTP-Anfrage aufruft, und ich möchte Unit-Test einen negativen Fall, wo es eine spezifische Ausnahme für eine 404-Antwort auslösen sollte. Jedoch versuche ich herauszufinden, wie man den Parameter verhöhnen kann, so dass er HTTPError als Nebeneffekt in der aufrufenden Funktion auslösen kann, scheint das Scheinobjekt eine aufrufbare Funktion zu erzeugen, die nicht der Parameter ist, den es akzeptiert, sondern nur ein Skalarwert.Python spottet einen Parameter

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') 

Antwort

1

Mock die urlopen(), um eine Ausnahme auszulösen; Sie können dies tun, indem Sie die side_effect attribute des Mocks setzen:

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

Ordentlich! Danke, das hat funktioniert –