利用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使用socket向客户端发送数据的方法
Apr 29 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
在python shell中运行python文件的实现
Dec 21 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
python实现简易版学生成绩管理系统
Jun 22 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 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 中的4种标记风格介绍
2012/05/10 PHP
PHP开发注意事项总结
2015/02/04 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
python练习程序批量修改文件名
2014/01/16 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
python 命令行传入参数实现解析
2019/08/30 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
一道SQL存储过程面试题
2016/10/07 面试题
大学生的应聘自我评价
2013/12/13 职场文书
结婚保证书
2015/01/16 职场文书
工商局个人工作总结
2015/03/03 职场文书
行政处罚告知书
2015/07/01 职场文书
MSSQL基本语法操作
2022/04/11 SQL Server
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript