您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 漳州分类信息网,免费分类信息发布

python unittest之异常测试

2024/2/9 12:56:26发布13次查看
exception.png
前言
在python unittest测试框架中,提供了一系列的方法用于验证程序的异常。
下面和我一起看看在unittest中,如何使用异常验证来进行断言,完成对应的测试工作
assertraises(exception, callable, args, *kwds)
参数说明:
assertraises( exception, # 待验证异常类型callable, # 待验证方法*args, # 待验证方法参数**kwds # 待验证方法参数(dict类型))
功能说明:
验证异常测试,验证异常(第一个参数)是当调用待测试函数时,在传入相应的测试数据后,如果测试通过,则表明待测试函数抛出了预期的异常,否则测试失败。
下面我们通过一个示例来进行演示,如果验证做除法时抛出除数不能为0的异常zerodivisionerror。
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding(utf-8)
# 除法函数
def p(a, b):
return a/b
# 测试用例
class demoraisetest(unittest.testcase):
def test_raise(self):
self.assertraises(zerodivisionerror, p, 1, 0)
# 主函数
if __name__ == '__main__':
unittest.main()
test_raise方法使用了assertraises方法来断言验证p方法除数为零时抛出的异常。
运行python raise_demo.py结果如下
.
-------------------------------------
ran 1 test in 0.000s ok
你还可以尝试调整下数据,如下:
def test_raise(self):
self.assertraises(zerodivisionerror, p, 1,1)
执行结果如下:
f
=====================================
fail: test_raise (__main__.demoraisetest)
----------------------------------------------------------------------
traceback (most recent call last): file raise_demo.py, line 18, in test_raise self.assertraises(zerodivisionerror, p, 1,1)assertionerror: zerodivisionerror not raised
----------------------------------
ran 1 test in 0.000s
assertraisesregexp(exception, regexp, callable, args, *kwds)
这里就不对参数进行说明了,该方法使用正则表达式方式来匹配异常断言,能更加灵活,实用更多的场景。
通常regexp参数是一个正常表达式,或包含正则表达式的字符串(使用re.search()函数)
下面跟我一下看下assertraisesregexp的实际应用示例
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import re
import sys
reload(sys)
sys.setdefaultencoding(utf-8)
# 除法函数
def p(a, b):
return a/b
# 测试用例
class demoraisetest(unittest.testcase):
def test_raise_regexp(self):
self.assertraisesregexp( zerodivisionerror, integer pision or modulo by zero, p, 2, 0)
# 主函数
if __name__ == '__main__':
unittest.main()
运行python test_raise_regexp.py上述示例,结果如下:
. -----------------------------------
ran 1 test in 0.001s ok
我们修改下除数,把
self.assertraisesregexp( zerodivisionerror, integer pision or modulo by zero, p, 2, 0)
改为:
self.assertraisesregexp( zerodivisionerror, integer pision or modulo by zero, p, 2, 2)
则执行失败,因为匹配失败了。
f
===================================
fail: test_raise_regexp (__main__.demoraisetest)
------------------------------------
traceback (most recent call last): file test_raise_regexp.py, line 19, in test_raise_regexp zerodivisionerror, integer pision or modulo by zero,assertionerror: zerodivisionerror not raised
------------------------------------
ran 1 test in 0.001s failed (failures=1)
总结
今天我们就如何对被测对象的抛出的异常进行断言验证,做了基本的说明和示例,大家可以基于上述示例进行修改理解。深入掌握异常断言原理和方法。
漳州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录