2012-01-22 5 views
5

Gerektiğinde bir HTTPException öğesinin yükseltilmesini sağlayacak bir birim sınaması yazmaya çalışıyorum. Aşağıdaki üretirassertRises hatası

import unittest 
from requests import HTTPError 
import pyport 

# Code omitted... 
def test_bad_item_type(self): 
    """A bad item type should raise a HTTPError""" 
    test_type = 'bad' 
    test_id = 1986134 
    self.assertRaises(HTTPError, pyport.get_item(test_type, test_id)) 

: İşte testtir

ERROR: test_bad_item_type (__main__.TestPyportFunctions) A bad item 
type should raise requests.HTTPError 
---------------------------------------------------------------------- 
Traceback (most recent call last): File "./tests.py", line 65, in 
test_bad_item_type 
    self.assertRaises(HTTPError, pyport.get_item(test_type, test_id)) File "/home/sean/workspace/pyport/pyport.py", line 54, in get_item 
    response.raise_for_status() File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 741, fin raise_for_status 
    raise HTTPError('%s Client Error' % self.status_code) HTTPError: 404 Client Error 

istisna yükseltilir, ancak testi ile yakalandı değildir. Bu, this question'da olana benzer, ancak tam olarak aynı değil. Birisi bana neyi özlediğimi söyleyebilir mi?

cevap

7

Olmalıdır:

self.assertRaises(HTTPError, pyport.get_item, test_type, test_id) 

assertRaises imzasını bakınız: Bu, bu şekilde tanımlanır

assertRaises(exception, callable, *args, **kwds) 

çünkü bunu yolunuzu, Python yorumlayıcısı yaparsanız ilk aramalar pyport.get_item(test_type, test_id) ve daha sonra sonucunu assertRaises'a geçirir. assertRaises olan sonuç hiç çağrılmaz ve istisna yakalanmaz. Şimdi, assertRaises işlevine ve argümanlarına erişime sahipse, işlevi kendisi arayabilir ve uygun özel durumu yakalayabilir.

+0

Detaylı açıklamanız için teşekkür ederiz. –

1

Eğer backported unittest2 modülünü kullanıyor yerine unittest, sen assertRaises kullanırken bir bağlam yöneticisi olarak kullanarak garip sözdizimi yazmak zorunda önleyebilirsiniz Python 2.7 veya daha yeni veya kullanıyorsanız:

with self.assertRaises(HTTPError): 
    pyport.get_item(test_type, test_id) 

http://docs.python.org/library/unittest.html#basic-example