2012-05-23 68 views
5

我使用nose 1.1.2來爲Python項目編寫測試。有這個assert_raises函數碰巧在文檔中提到,但我無法在任何地方找到它。鼻子的assert_raises函數在哪裏?

它應該是這樣的一個簡寫:

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 

,將成爲:

assert_raises(ValueError, 
       do_something_that_should_raise_value_error) 

assert_raises(TypeError, 
       do_something_else_that_should_raise_type_error) 

我已經搜索源代碼,我發現,只有提起是在tools.py模塊,在raises文檔中:

如果要測試許多有關異常的斷言在單個測試中,您可能需要使用assert_raises

此功能是否從鼻子上移除?如果是這樣,有人可以幫我理解爲什麼嗎?

回答

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' 

我個人用nosetest測試unittest2.TestCase類,並使用self.assertRaises。

+0

好的,那可行!謝謝!我剛剛意識到它沒有明確定義在nose.tools上的原因是因爲它是通過unittest.TestCase assertRaise實現的解決方法。因此,eclipse會在'from nose.tools import assert_raises'上報告一個導入錯誤。 – tbellardi

+0

這不僅僅是PyDev出錯的地方,在使用Jython的大型項目中我記得不得不爲100多個標識符添加例外...... –

5

在您的測試功能上使用@raises(*exceptions)裝飾器。

+4

驗證是否引發了其中一個異常,所以我需要爲每個引發的預期錯誤提供一個測試函數。如果我想用單個測試函數來驗證引發的許多異常,那對我沒有幫助。 – tbellardi