python unittest之断言及示例
前言
python unintest单元测试框架提供了一整套内置的断言方法。
- 如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态
- 如果异常,则当做错误来处理 注意:以上两种方式的区别
- 如果成功,则标识该测试为成功状态
下面我们看下在unittest框架中定义了哪几类断言方法:
- 基本的Boolean断言,即:要么True,要么False的验证
- 简单比较断言,例如比较a,b两个变量的值
- 复杂断言
基本断言方法
基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。
序号 |
断言方法 |
断言描述 |
---|---|---|
1 |
assertEqual(arg1, arg2, msg=None) |
验证arg1=arg2,不等则fail |
2 |
assertNotEqual(arg1, arg2, msg=None) |
验证arg1 != arg2, 相等则fail |
3 |
assertTrue(expr, msg=None) |
验证expr是true,如果为false,则fail |
4 |
assertFalse(expr,msg=None) |
验证expr是false,如果为true,则fail |
5 |
assertIs(arg1, arg2, msg=None) |
验证arg1、arg2是同一个对象,不是则fail |
6 |
assertIsNot(arg1, arg2, msg=None) |
验证arg1、arg2不是同一个对象,是则fail |
7 |
assertIsNone(expr, msg=None) |
验证expr是None,不是则fail |
8 |
assertIsNotNone(expr, msg=None) |
验证expr不是None,是则fail |
9 |
assertIn(arg1, arg2, msg=None) |
验证arg1是arg2的子串,不是则fail |
10 |
assertNotIn(arg1, arg2, msg=None) |
验证arg1不是arg2的子串,是则fail |
11 |
assertIsInstance(obj, cls, msg=None) |
验证obj是cls的实例,不是则fail |
12 |
assertNotIsInstance(obj, cls, msg=None) |
验证obj不是cls的实例,是则fail |
看一下上述断言简单的代码示例
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class demoTest(unittest.TestCase):
def test1(self):
self.assertEqual(4 + 5,9)
def test2(self):
self.assertNotEqual(5 * 2,10)
def test3(self):
self.assertTrue(4 + 5 == 9,"The result is False")
def test4(self):
self.assertTrue(4 + 5 == 10,"assertion fails")
def test5(self):
self.assertIn(3,[1,2,3])
def test6(self):
self.assertNotIn(3, range(5))
if __name__ == '__main__':
unittest.main()
将上述代码保存至demoAssert.py中,运行以下命令
python demoAssert.py
具体结果请看运行结果即可,这里不做一一分解了。
比较断言
unittest框架提供的第二种断言类型就是比较断言。
下面我们看下各种比较断言:
- assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7
- assertNotAlmostEqual (first, second, places, msg, delta)
验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7
注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta
- assertGreater (first, second, msg = None)
验证first > second,否则fail
- assertGreaterEqual (first, second, msg = None)
验证first ≥ second,否则fail
- assertLess (first, second, msg = None)
验证first < second,否则fail
- assertLessEqual (first, second, msg = None)
验证first ≤ second,否则fail
- assertRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
- assertNotRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
下面看一个简单的示例
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import math
import re
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class demoTest(unittest.TestCase):
def test1(self):
self.assertAlmostEqual(22.0/7,3.14)
def test2(self):
self.assertNotAlmostEqual(10.0/3,3)
def test3(self):
self.assertGreater(math.pi,3)
def test4(self):
self.assertNotRegexpMatches("Tutorials Point (I) Private Limited",
"Point")
if __name__ == '__main__':
unittest.main()
将上述代码保存至demoAssert2.py中,运行以下命令
python demoAssert2.py
具体结果请看运行结果即可,这里不做一一分解了。
复杂断言
unittest框架提供的第三种断言类型,可以处理元组、列表、字典等更复杂的数据类型。
序号 |
断言方法 |
断言描述 |
---|---|---|
1 |
assertListEqual (list1, list2, msg = None) |
验证列表list1、list2相等,不等则fail,同时报错信息返回具体的不同的地方 |
2 |
assertTupleEqual (tuple1, tuple2, msg = None) |
验证元组tuple1、tuple2相等,不等则fail,同时报错信息返回具体的不同的地方 |
3 |
assertSetEqual (set1, set2, msg = None) |
验证集合set1、set2相等,不等则fail,同时报错信息返回具体的不同的地方 |
4 |
assertDictEqual (expected, actual, msg = None) |
验证字典expected、actual相等,不等则fail,同时报错信息返回具体的不同的地方 |
下面看下具体的示例代码:
# _*_ coding:utf-8 _*_
__author__ = '苦叶子'
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class demoTest(unittest.TestCase):
def test1(self):
self.assertListEqual([2,3,4], [1,2,3,4,5])
def test2(self):
self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))
def test3(self):
self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})
if __name__ == '__main__':
unittest.main()
将上述代码保存至demoAssert2.py中,运行以下命令
python demoAssert3.py
具体结果请看运行结果即可,这里不做一一分解了。
总结
本次从python unittest提供的三种标准的断言方法进行了分享,要更好的掌握这些断言,需要去做扎实的练习。才能确保后续用的时候能更好的应用。
- IE7下当position:fixed遇到text-align:center
- 数组-在Shell脚本中的基本使用介绍
- .Net Core下通过Proxy 模式 使用 WCF
- javascript中function调用时的参数检测常用办法
- squid代理http和https方式上网的操作记录
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)
- 域名hiku.com曾百万价格被交易,目前被加拿大大麻公司收购
- Linux系统下的用户密码设定梳理
- Silverlight中的序列化
- 第四次工业革命
- 每周.NET前沿技术文章摘要(2017-06-07)
- 再谈Silverlight中的对象序列化/反序列化
- jQuery打造智能提示插件
- 每周.NET前沿技术文章摘要(2017-05-17)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python闭包及装饰器运行原理解析
- Django中Q查询及Q()对象 F查询及F()对象用法
- keras.layer.input()用法说明
- python入门:argparse浅析 nargs='+'作用
- PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
- YII框架行为behaviors用法示例
- 浅谈Python里面None True False之间的区别
- python如何导入依赖包
- 深入理解Python 多线程
- Yii2框架自定义验证规则操作示例
- 浅析PHP 中move_uploaded_file 上传中文文件名失败
- 结束运行python的方法
- 解析Tensorflow之MNIST的使用
- 面向新手解析python Beautiful Soup基本用法
- 基于keras中的回调函数用法说明