2012-05-23 13 views
5

Python projesi için test yazmak için burun 1.1.2 kullanıyorum. Belgelerde belirtilmesi gereken assert_raises işlevi var, ancak hiçbir yerde bulamıyorum.Burun assert_raises işlevi nerede?

value_error_raised = False 
try: 
    do_something_that_should_raise_value_error() 
except ValueError: 
    value_error_raised = True 
assert value_error_raised 

type_error_raised = False 
try: 
    do_something_else_that_should_raise_type_error() 
except TypeError: 
    type_error_raised = True 
assert type_error_raised 

olacaktı:

Böyle bir şey için bir kestirme olmalıdır Zaten kaynak kodu arandı ve buldum tek söz tools.py oldu

assert_raises(ValueError, 
       do_something_that_should_raise_value_error) 

assert_raises(TypeError, 
       do_something_else_that_should_raise_type_error) 

modülü, raises belgelerinin içinde:

Özel durumlar hakkında birçok iddiayı test etmek isterseniz Tek bir testte, bunun yerine assert_raises'u kullanmak isteyebilirsiniz.

Bu işlev buruntan mı çıkarıldı? Eğer öyleyse, birisi nedenini anlamama yardımcı olabilir mi?

cevap

7
>>> from nose.tools import assert_raises 
>>> assert_raises 
<bound method Dummy.assertRaises of <nose.tools.Dummy testMethod=nop>> 
>>> import nose 
>>> nose.__version__ 
'1.1.2' 

Şahsen nosetests ile unittest2.TestCase sınıflarını kullanın ve self.assertRaises kullanın.

+0

Tamam, işe yarıyor! Teşekkürler! Burn.tools üzerinde açık bir şekilde tanımlanma nedeninin, unittest.TestCase assertRaise uygulaması aracılığıyla bir çözüm olması nedeniyle fark ettim. Sonuç olarak, tutulma 'import.tools import assert_raises' 'den bir içe aktarma hatası bildirmeye devam eder. – tbellardi

+0

sadece PyDev'in yanlış olduğu bir yer değil, Jython'u kullanan daha büyük bir projede, yüzlerce tanımlayıcı için istisnalar eklemek zorunda olduğumu hatırlıyorum ... –

5

Test işlevinizde @raises(*exceptions) dekoratörünü kullanın.

+4

Bu özel durumlardan birinin kaldırıldığını doğrular, bu nedenle, beklenen her bir hata için bir sınama işlevine ihtiyacım olur. Birden fazla istisnai durumu doğrulamak için tek bir test fonksiyonu istiyorsam, bu bana yardımcı olmaz. – tbellardi

İlgili konular