UnitTest 框架 - 异常测试


Python 测试框架提供了以下断言方法来检查是否引发异常。

断言Raises(异常,可调用,*args,**kwds)

测试使用任何位置或关键字参数调用函数时是否引发异常(第一个参数)。如果引发预期的异常,则测试通过;如果引发另一个异常,则测试为错误;如果未引发异常,则测试失败。要捕获一组异常中的任何一个,可以将包含异常类的元组作为异常传递。

在下面的示例中,定义了一个测试函数来检查是否引发 ZeroDivisionError。

import unittest

def div(a,b):
   return a/b
class raiseTest(unittest.TestCase):
   def testraise(self):
      self.assertRaises(ZeroDivisionError, div, 1,0)

if __name__ == '__main__':
   unittest.main()

testraise() 函数使用assertRaises() 函数来查看调用div() 函数时是否发生被零除的情况。上面的代码会引发异常。但将 div() 函数的参数更改如下 -

self.assertRaises(ZeroDivisionError, div, 1,1)

当使用这些更改运行代码时,测试会失败,因为不会发生 ZeroDivisionError。

F
================================================================
FAIL: testraise (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 7, in testraise
      self.assertRaises(ZeroDivisionError, div, 1,1)
AssertionError: ZeroDivisionError not raised

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures = 1)

assertRaisesRegexp(异常、正则表达式、可调用、*args、**kwds)

测试正则表达式是否与引发的异常的字符串表示形式匹配。regexp 可以是正则表达式对象或包含适合 re.search() 使用的正则表达式的字符串。

以下示例显示了如何使用assertRaisesRegexp() -

import unittest
import re

class raiseTest(unittest.TestCase):
   def testraiseRegex(self):
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
      
if __name__ == '__main__':
   unittest.main()

在这里, testraseRegex() 测试作为第一个参数不会失败。在第二个参数字符串中找到“Point”。

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:/Python27/raiseTest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
AssertionError: TypeError not raised
----------------------------------------------------------------------

然而,变化如下所示 -

self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")

将抛出 TypeError 异常。因此,将显示以下结果 -

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
AssertionError: "invalid" does not match 
   "first argument must be string or compiled pattern"
----------------------------------------------------------------------