利用Python中unittest实现简单的单元测试实例详解


Posted in Python onJanuary 09, 2017

前言

单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西。但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样的彰显你的实力。如此多的框架和工具,很容易让人困惑,困惑的原因是因为并没有理解它的基本原理,如果一些基本的概念都不清楚,怎么能够写出思路清晰的测试代码?

今天的主题就是unittest,作为标准python中的一个模块,是其它框架和工具的基础,参考资料是它的官方文档:http://docs.python.org/2.7/library/unittest.html和源代码,文档已经写的非常好了,本文给出一个实例,很简单,看一下就明白了。

实例如下

首先给出一个要测试的Python模块,代码如下:

待测试的程序:date_service.pyPython

# coding:utf8
'''
日期常用类
 
@author: www.crazyant.net
'''
 
def get_date_year_month(pm_date):
 """获取参数pm_date对应的年份和月份
 """
 if not pm_date:
  raise Exception("get_curr_year_month: pm_date can not be None")
 
 # get date's yyyymmddHHMMSS pattern
 str_date = str(pm_date).replace("-", "").replace(" ", "").replace(":", "")
 
 year = str_date[:4]
 month = str_date[4:6]
 return year, month

然后就可以编写测试脚本,代码如下:

测试程序:test_date_service.pyPython

# coding: utf8
 
"""
测试date_service.py
 
@author: peishuaishuai
"""
 
import unittest
 
from service import date_service
 
class DateServiceTest(unittest.TestCase):
 """
 test clean_tb_async_src_acct.py
 """
 
 def setup(self):
  """在这里做资源的初始化 """
  pass
 
 def tearDown(self):
  """在这里做资源的释放 """
  pass
 
 def test_get_date_year_month_1(self):
  """ 测试方法1,测试方法应该以test_开头 """
  
  pm_date = "2015-11-25 14:40:52"
  year, month = date_service.get_date_year_month(pm_date)
  self.assertEqual(year, "2015", "year not equal")
  self.assertEqual(month, "11", "month not equal")
 
 def test_get_date_year_month_2(self):
  """ 测试方法1,测试方法应该以test_开头 """
  pm_date = "20161225144052"
  year, month = date_service.get_date_year_month(pm_date)
  self.assertEqual(year, "2016", "year not equal")
  self.assertEqual(month, "12", "month not equal")
 
 
# test main
if __name__ == "__main__":
 unittest.main()

运行这个test_date_service.py,就会打印出如下信息:

运行测试结果

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
 
OK

这里的每一个点,就代表运行成功了一个测试,最后会给出运行成功了全部的多少个测试以及测试的时间。

之前的很多时间,我一直不知道写单测有什么用,因为单测只是把写好的程序运行了一遍,并没有创建新的逻辑,我心里在疑惑“我已经将程序按照我的想法写好了,它就会按照我的设计来运行,为什么要用单测重新走一遍呢?”,后来出了一个事情,代码出了BUG,我调试了好久,才发现问题出在”obja.equals(objb)”,因为obja和objb一个是Long一个是Integer,所以即使数值相同,也不会相等。

从那一刻,我发现单测做的事情,其实就是“验证程序是否按照我的想法在运行”,这才是它的终极目的,但是,这却是很关键的事情,设计往往没有错,但是写出来的代码却经常并不是按照我们所想的去运行的。

单测,就是验证代码是不是按照我们想象的在运行,这也是单测这个技术的意义所在。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python实现包含min函数的栈
Apr 29 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
python 实现单通道转3通道
Dec 03 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
Python中的sort()方法使用基础教程
Jan 08 #Python
Python守护进程和脚本单例运行详解
Jan 06 #Python
Python 基础知识之字符串处理
Jan 06 #Python
详解Python中的相对导入和绝对导入
Jan 06 #Python
Python中取整的几种方法小结
Jan 06 #Python
Python正则表达式实现截取成对括号的方法
Jan 06 #Python
关于Python元祖,列表,字典,集合的比较
Jan 06 #Python
You might like
PHP中str_replace函数使用小结
2008/10/11 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
vue router demo详解
2017/10/13 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
自我鉴定写作要点
2014/01/17 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
2014年教学工作总结
2014/11/13 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
个园导游词
2015/02/04 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS