UnitTest 框架 – 异常测试
UnitTest 框架 – 异常测试
Python 测试框架提供以下断言方法来检查是否引发异常。
assertRaises(异常,可调用,*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" ----------------------------------------------------------------------