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 SVM(支持向量机)实现方法完整示例
Jun 19 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
对python3中, print横向输出的方法详解
Jan 28 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
Django的models中on_delete参数详解
Jul 16 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
Python命令行参数argv和argparse该如何使用
Feb 08 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python K近邻算法的kd树实现
2018/09/06 Python
python pygame实现五子棋小游戏
2020/10/26 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python字符串下标与切片及使用方法
2020/02/13 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
美国糖果店:Sugarfina
2019/02/21 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
楼面部长岗位职责范本
2014/02/14 职场文书
建材投资建议书
2014/05/16 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
自信主题班会
2015/08/14 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Python实战之疫苗研发情况可视化
2021/05/18 Python
Python闭包的定义和使用方法
2022/04/11 Python