Python单元测试框架unittest使用方法讲解


Posted in Python onApril 13, 2015

概述

1.测试脚手架(test fixture)

测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown().

2.测试案例(test case)

最小的测试单元.

3.测试套件(test suite)

测试案例的集合.

4.测试运行器(test runner)

测试执行的组件.

命令行接口

可以用命令行运行测试模块,测试类以及测试方法.

python -m unittest test_module1 test_module2

python -m unittest test_module.TestClass

python -m unittest test_module.TestClass.test_method

可加-v打印详细信息
python -m unittest -v test_module

测试案例自动搜索

unittest支持简单的test discovery. 命令行传入discovery后,框架会自动在当前目录搜索要测试的案例并执行.搜索目录必须是包或者模块.基本使用如下:

cd project_directory 

python -m unittest discover

子选项如下:
-v, ?verbose
输出信息的详细级别

-s, ?start-directory directory
开始搜索目录 (默认为当前目录)

-p, ?pattern pattern
匹配的文件名 (默认为test*.py)

-t, ?top-level-directory directory
搜索的顶层目录 (默认为start directory)

创建测试代码

1.方式一

创建子类继承unittest.TestCase,然后重写以下方法

class WidgetTestCase(unittest.TestCase):

    def setUp(self):

        pass

    def runTest(self):

        pass

    def tearDown(self):

        pass

运行

2.方式二

编写以test开头的方法

class WidgetTestCase(unittest.TestCase):

    def setUp(self):

        pass
    def test_xx1(self)

    def test_xx2(self)

    ...

    def test_xxN(self)
    def tearDown(self):

        pass

构建测试套件

方式一

widgetTestSuite = unittest.TestSuite()

widgetTestSuite.addTest(WidgetTestCase('test_default_size'))

widgetTestSuite.addTest(WidgetTestCase('test_resize'))

方式二(推荐)

def suite():

    suite = unittest.TestSuite()

    suite.addTest(WidgetTestCase('test_default_size'))

    suite.addTest(WidgetTestCase('test_resize'))

    return suite

方式三(推荐)
def suite():

    tests = ['test_default_size', 'test_resize']

    return unittest.TestSuite(map(WidgetTestCase, tests))

方式四

多个测试套件构建成更大的测试套件

suite1 = module1.TheTestSuite()

suite2 = module2.TheTestSuite()

alltests = unittest.TestSuite([suite1, suite2])

方式五

unittest的TestLoader提供生成默认的测试套件

suite = unittest.TestLoader().loadTestsFromTestCase(WidgetTestCase)

忽略测试案例( Python2.7支持)

可以分无条件忽略和有条件忽略,通过装饰器实现

class MyTestCase(unittest.TestCase):
    @unittest.skip("demonstrating skipping")

    def test_nothing(self):

        self.fail("shouldn't happen")
    @unittest.skipIf(mylib.__version__ < (1, 3),

                     "not supported in this library version")

    def test_format(self):

        # Tests that work for only a certain version of the library.

        pass
    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")

    def test_windows_support(self):

        # windows specific testing code

        pass

测试类也可以忽略
@unittest.skip("showing class skipping")

class MySkippedTestCase(unittest.TestCase):

    def test_not_run(self):

        pass
Python 相关文章推荐
在Python的Django框架中使用通用视图的方法
Jul 21 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
python遍历目录的方法小结
Apr 28 Python
使用Python绘制图表大全总结
Feb 11 Python
python Flask实现restful api service
Dec 04 Python
python中Lambda表达式详解
Nov 20 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
Django用户身份验证完成示例代码
Apr 03 Python
基于python纯函数实现井字棋游戏
May 27 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
零基础学python应该从哪里入手
Aug 11 Python
Python循环之while无限迭代
Apr 30 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 #Python
深入Python函数编程的一些特性
Apr 13 #Python
Python命令行参数解析模块getopt使用实例
Apr 13 #Python
Python中文件操作简明介绍
Apr 13 #Python
Python单元测试框架unittest简明使用实例
Apr 13 #Python
进一步了解Python中的XML 工具
Apr 13 #Python
Python中的模块和包概念介绍
Apr 13 #Python
You might like
深入PHP FTP类的详解
2013/06/13 PHP
PHP实现的json类实例
2015/07/28 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
详解webpack 最简打包结果分析
2019/02/20 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
vue实现计算器功能
2020/02/22 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
Python对List中的元素排序的方法
2018/04/01 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python实现dijkstra最短路由算法
2019/01/17 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Python如何绘制日历图和热力图
2020/08/07 Python
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
实体的生命周期
2013/08/31 面试题
优秀毕业生求职信范文
2014/01/02 职场文书
《尊严》教学反思
2014/02/11 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
历史学专业求职信
2014/06/19 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
人生遥控器观后感
2015/06/11 职场文书