python unittest之断言及示例

assert.png

前言

python unintest单元测试框架提供了一整套内置的断言方法。

  1. 如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态
  2. 如果异常,则当做错误来处理
    注意:以上两种方式的区别
  3. 如果成功,则标识该测试为成功状态

下面我们看下在unittest框架中定义了哪几类断言方法:

  1. 基本的Boolean断言,即:要么True,要么False的验证
  2. 简单比较断言,例如比较a,b两个变量的值
  3. 复杂断言

基本断言方法

基本的断言方法提供了测试结果是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框架提供的第二种断言类型就是比较断言。

下面我们看下各种比较断言:

  1. assertAlmostEqual (first, second, places = 7, msg = None, delta = None)

验证first约等于second。
palces: 指定精确到小数点后多少位,默认为7

  1. assertNotAlmostEqual (first, second, places, msg, delta)

验证first不约等于second。
palces: 指定精确到小数点后多少位,默认为7

==注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta==

  1. assertGreater (first, second, msg = None)

验证first > second,否则fail

  1. assertGreaterEqual (first, second, msg = None)

验证first ≥ second,否则fail

  1. assertLess (first, second, msg = None)

验证first < second,否则fail

  1. assertLessEqual (first, second, msg = None)

验证first ≤ second,否则fail

  1. assertRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索==匹配==的文本text。
regexp:通常使用re.search()

  1. 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提供的三种标准的断言方法进行了分享,要更好的掌握这些断言,需要去做扎实的练习。才能确保后续用的时候能更好的应用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,707评论 18 139
  • python自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行...
    燕京博士阅读 481评论 0 3
  • 单元测试 什么是单元 单元测试(unit testing),是指对软件中的最小可测试单元(一个模块、一个函数或者一...
    PPMac阅读 6,526评论 0 19
  • 总有人以为 分手就是爱情的终点 她们以为 只要分手了 只要不再见面 两个人就能 把以往的一切 当做是过眼云烟 然后...
    幻梦邪魂阅读 240评论 0 1
  • 写在前面: 我们今天的目标就是把风信子中心部分的花团画好,因为中心部分位于视觉的焦点,起到吸睛的作用,所以要把它处...
    风熏手绘馆阅读 988评论 3 20