2017-05-05 103 views
0

有誰知道如何檢查異常是否正確引發?檢查在Python 2.7中是否正確引發異常?

我需要一些在Python 2.7中有效的東西。下面的「斷言」是不是從Python使用單元測試庫相當正確的方法:

assert (a_a0_getinst.add_port("iTCK", ISC.PortType_INPUT)), "Can't add duplicate port" 

我得到的錯誤是:

Traceback (most recent call last): 
    File "test_010_module.py", line 157, in runTest 
    a_a0_addinst = a_a0.add_instance("A00", b_a0) 
    File "/nfs/sc/disks/sc_dteg_2004/users/acheung1/dteg_tools-isc/python/t/ISC.py", line 475, in add_instance 
    return _ISC.SharedModule_add_instance(self, name, module) 
RuntimeError: Can't add duplicate instance with instance name 'A00' to module 'A_A0' 

回答

0

如果你只是想確保它會引發在正確類型的異常的,你可以使用:

self.assertRaises(RuntimeError, your_function, *args, **kwargs) 

在unitt est.TestCase類。見the docs for assertRaises

如果你還需要檢查它也有正確的錯誤消息,您可以改用:

self.assertRaisesRegexp(RuntimeError, "error message", your_function_call, *args, **kwargs) 

在類unittest.TestCase生成。這裏有the docs for assertRaisesRegexp

你也可以做這些作爲背景的經理,在這種情況下你不需要的參數分離出來:

with self.assertRaises(RuntimeError): 
    your_function_call(arg1, arg2) 

with self.assertRaisesRegexp(RuntimeError, "error message"): 
    your_function_call(arg1, arg2) 

這些都是爲Python 2.7,你所說的。對於Python 3.x,assertRaises表現相同,但正則表達式稱爲assertRegex(no p)。

編輯:正如在評論中指出的,這隻適用於如果你使用unittest風格的測試類。如果你使用py.test,it has its own similar methods you can use

+0

假設OP使用unittest。 – tdelaney

+0

謝謝,bouteillebleu! 我這樣做: self.assertRaises(RuntimeError,a_a0.add_instance( 「A00」,b_a0)) ......但我仍然收到這個同樣的錯誤問題說明前述。 –

+0

也試過 「self.assertRaisesRegexp(RuntimeError, 」不能添加與實例名稱 'A00' 重複實例模塊 'A_A0'「,a_a0.add_instance( 」A00「,B _a0))」 錯誤: 回溯(最多...最後一個): 運行測試中的文件「test_010_module.py」,行157, self.assertRaisesRegexp(RuntimeError,「無法向模塊」A_A0'「,a_a0添加實例名稱爲'A00'的重複實例。 add_instance(「A00」,b_a0)) add_instance中的文件「xxx」,第x行 return _ISC.SharedModule_add_instance(self,name,module) RuntimeError:無法將實例名稱爲'A00'的重複實例添加到模塊' A_A0 –