Python unittest模块用法实例分析


Posted in Python onMay 25, 2018

本文实例讲述了Python unittest模块用法。分享给大家供大家参考,具体如下:

python的unittest模块提供了一个测试框架,只要我们写一个继承unittest.TestCase的类,类中用setUp做初始化,用tearDown做清理。

主要用到的函数有:

failedinfo表示不成立打印信息failedinfo,为可选参数
self.fail([msg])会无条件的导致测试失败,不推荐使用。
self.assertEqual(value1, value2, failedinfo) # 断言value1 == value2
self.assertTrue(表达式, failedinfo) # 断言value为真
self.assertFalse(表达式, failedinfo) # 断言value为假
# 断言肯定发生异常,如果没发生异常,则为测试失败。
# 参数1为异常,参数二为抛出异常的调用对象,剩余参数为传递给可调用对象的参数。
self.assertRaises(ValueError, self.widget.resize, -1, -1)
调用时机的加self,如self.assertEqual(self.seq, range(10)),self.assertTrue(value > 100)

更详细的教程见:http://pyunit.sourceforge.net/pyunit_cn.html

Python代码:

#coding=utf-8
import random
import unittest
class TestSequenceFunctions(unittest.TestCase):
  def setUp(self):
    self.seq = range(10)
  def test_shuffle(self):
    # make sure the shuffled sequence does not lose any elements
    random.shuffle(self.seq)
    self.seq.sort()
    self.assertEqual(self.seq, range(10))
    # should raise an exception for an immutable sequence
    self.assertRaises(TypeError, random.shuffle, (1,2,3))
  def test_choice(self):
    element = random.choice(self.seq)
    self.assertTrue(element in self.seq)
  def test_sample(self):
    with self.assertRaises(ValueError):
      random.sample(self.seq, 20)
    for element in random.sample(self.seq, 5):
      self.assertTrue(element in self.seq)
results_fields = [
  ("username", unicode),
  ("showid", unicode),
  ("total_pv", int),
  ("pubdate", unicode),
  ("tags", list),
  ("showname", unicode),
  ("pg", int),
  ("ext", str),
]
results_fields_map = dict(results_fields)
class TestDictValueFormatFunctions(unittest.TestCase):
  def setUp(self):
    self.results = [{
      "username": u"疯狂豆花",
      "showid": u"130e28f0fe0811e0a046",
      "total_pv": 14503214,
      "pubdate": u"2012-07-07 01:22:47",
      "tags": [
        "轩辕剑",
        "天之痕"
        ],
      "showname" : u"轩辕剑之天之痕",
      "pg" : 1,
      "ext" : "mp4"
    }
    ]
  def test_format(self):
    self.assertTrue(isinstance(self.results, list), "self.results's type must be dict but got {0}".format(type(self.results)))
    for r in self.results:
      for f in results_fields_map:
        value = r.get(f, None)
        self.assertTrue(isinstance(value, results_fields_map[f]), u"{0}'s type must be {1} but got {2}".format(value, results_fields_map[f], type(value)))
        #self.assertTrue(isinstance(value, results_fields_map[f]))
  def test_value(self):
    for r in self.results:
      self.assertEqual(r["pg"], 1)
      self.assertEqual(r["ext"], u"mp4")
if __name__ == '__main__':
  # unittest.main() # 用这个是最简单的,下面的用法可以同时测试多个类
  # unittest.TextTestRunner(verbosity=2).run(suite1) # 这个等价于上述但可设置verbosity=2,省去了运行时加-v
  suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
  suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions)
  suite = unittest.TestSuite([suite1, suite2])
  unittest.TextTestRunner(verbosity=2).run(suite)

运行结果:

test_choice (__main__.TestSequenceFunctions) ... ok
test_sample (__main__.TestSequenceFunctions) ... ok
test_shuffle (__main__.TestSequenceFunctions) ... ok
test_format (__main__.TestDictValueFormatFunctions) ... ok
test_value (__main__.TestDictValueFormatFunctions) ... ok

----------------------------------------------------------------------
Ran 5 tests in 0.013s

OK

更多Python相关内容感兴趣的读者可查看本站专题:《Python入门与进阶经典教程》、《Python字符串操作技巧汇总》、《Python列表(list)操作技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中使用logging模块打印log日志详解
Apr 05 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
Python3多线程版TCP端口扫描器
Aug 31 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
详解python如何引用包package
Jun 07 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python的html标准库
Apr 29 Python
Python开发五子棋小游戏
May 02 Python
使用Python的Django和layim实现即时通讯的方法
May 25 #Python
matplotlib subplots 调整子图间矩的实例
May 25 #Python
Matplotlib 生成不同大小的subplots实例
May 25 #Python
python opencv3实现人脸识别(windows)
May 25 #Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 #Python
matplotlib savefig 保存图片大小的实例
May 24 #Python
python3连接MySQL数据库实例详解
May 24 #Python
You might like
php你的验证码安全码?
2007/01/02 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
深入讲解Python编程中的字符串
2015/10/14 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
函数指针的定义是什么
2016/08/14 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
科级干部考察材料
2014/02/15 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
个人事迹材料范文
2014/12/29 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
介绍信范文大全
2015/05/07 职场文书
小学美术教学反思
2016/02/17 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书