利用Python中unittest实现简单的单元测试方法介绍 - 公司荣誉 - 长春市隆兴伟业物流有限公司
现在的位置: 主页 > 公司荣誉 > 文章正文
利用Python中unittest实现简单的单元测试方法介绍
作者:长春市隆兴伟业物流有限公司 来源:www.lxwywl.com 发布时间:2017-09-12 16:25:06
利用Python中unittest实现简单的单元测试方法介绍

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

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

实例如下

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

待测试的程序:date_service.pyPython

# coding:utf8

'''

日期常用类

@author:

'''

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,所以即使数值相同,也不会相等。

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

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

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:潜江网站建设 http://qianjiang.45qun.com


  • 上一篇:Android中Activity切换时共享视图元素的切换动画(4.x
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 长春市隆兴伟业物流有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100