2012-08-01 14 views

cevap

59

assert_raises() fonksiyon testleri, belirli parametrelere sahip sunulduğunda emin bir işlev çağrısı bir istisna yükseltir yapmak. İki sayıları toplayan bir işlevi add olsaydı, diyelim ki, bir tamsayı ve bir dize geçmek zaman

Örneğin, muhtemelen TypeError yükseltmek gerekir. Yani: İlk bağımsız değişken, beklediğiniz özel durum türüdür. İkincisi, çağrı işlevidir. Argümanların geri kalanı işleve iletilecektir (bu durumda, işlev içinde x ve y olacaktır). Beklenen durum fonksiyonu tarafından yükseltilir ise

, onaylama işlemi geçer. Kabul cevap doğru olmakla birlikte

+1

Tamam teşekkürler! Ama assert_raises böyle assert_equal gibi diğer Burun fonksiyonları ödeme nereye sen de iyi bir burun belgeleri için bir link biliyor musunuz! Bunu da bulmakta vardı – user1544624

+0

@kindall. Gerçi 'help (assert_rases)' ı deneyebilirsiniz. – kindall

+4

Biraz gizli, ama http://nose.readthedocs.org/en/latest/testing_tools.html#module-nose.tools birinci paragraf şöyle belirtmektedir: "... ve aynı assertX yöntemlerinin tümü, unittest.TestCase içinde bulundu. sadece PEP 8 modada yazıldığından, assertEqual yerine assert_equal). " İşte bu liste: http://docs.python.org/2/library/unittest.html#assert-methods –

78

, ben assert_raises yönteme daha iyi bir kullanım olduğunu düşünüyorum.

sadece bir özel durum oluşur iddia etmek istiyorsanız

, bu @raises sözdizimi kullanmak muhtemelen daha basit ve daha temiz. Ancak

@raises(HTTPError) 
def test_exception_is_raised: 
    call_your_method(p1, p2) 

, örneğin, yükseltilmiş hariç biraz daha yapmak istiyorum varsayalım: yerine 500, izinsiz: Sunucu Hatası biz bu httpError tip 401 olduğu kaldırdı iddia gerekir. sözdizimi yukarıdaki Böyle bir durumda

biz assert_raises kullanmak ancak farklı bir şekilde gerektiği yararlı değildir. assert_raises ikinci parametresi olarak callable geçmezse, istisna ayrıntılarını daha fazla test etmek için kullanabileceğimiz bir bağlam geri dönecektir.

def test_exception_is_raised: 
    with assert_raises(HTTPError) as cm: 
     call_your_method(p1, p2) 
    ex = cm.exception # raised exception is available through exception property of context 
    ok_(ex.code == 401, 'HTTPError should be Unauthorized!') 
+8

Bana yeni bir şey öğretti. – user1544624

+0

İstisna mesajını görmek istiyorum. Cm.exception adresinden aldığım ex boş bir ex.message var. Bununla birlikte istisna bir mesajla yükseltilir. Neyin yanlış gidiyor? – akshitBhatia

+1

Bunu nasıl yapacağım hakkında bilgi bulmayı başaran tek yer ... –

İlgili konular