16.3.8 测试异常
正如前面提到的,如果测试产生AssertionError以外的一个异常,则会将其处理为一个错误。这种行为对于发现错误很有用,还有助于修改现有覆盖的代码。不过,有些情况下,测试要验证代码确实会产生一个异常。例如,如果为对象的属性提供一个非法值,那么与在测试中捕获异常相比,assertRaises()可以得到更简洁的代码。下面的例子包含两个测试,可以在这个基础上进行比较。
import unittest
def raises_error(*args,**kwds):
raise ValueError('Invalid value: ' + str(args) + str(kwds))
class ExceptionTest(unittest.TestCase):
def testTrapLocally(self):
try:
raises_error('a',b='c')
except ValueError:
pass
else:
self.fail('Did not see ValueError')
def testAssertRaises(self):
self.assertRaises(
ValueError,
raises_error,
'a',
b='c',
)
这两个测试的结果是相同的,不过第二个使用assertRaises()的测试更为简洁。