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解决计数原理问题的方法
Aug 04 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python selenium循环登陆网站的实现
Nov 04 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
python如何随机生成高强度密码
Aug 19 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 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 随机数的深入理解
2013/06/05 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python实现ftp客户端示例分享
2014/02/17 Python
Python中字符串的格式化方法小结
2016/05/03 Python
python脚本替换指定行实现步骤
2017/07/11 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
校园自助餐厅的创业计划书
2013/12/26 职场文书
如何写你的创业计划书
2014/01/07 职场文书
服务承诺口号
2014/05/22 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
公司感谢信范文
2015/01/22 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
爱护环境建议书
2015/09/14 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
详细介绍python操作RabbitMq
2022/04/12 Python