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运行的17个时新手常见错误小结
Aug 07 Python
在Python中使用lambda高效操作列表的教程
Apr 24 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
对python sklearn one-hot编码详解
Jul 10 Python
flask-restful使用总结
Dec 04 Python
Django实现单用户登录的方法示例
Mar 28 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
python读取xml文件方法解析
Aug 04 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
python 实现德洛内三角剖分的操作
Apr 22 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
消息持续发送的完整例子
2006/10/09 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python正规则表达式学习指南
2016/08/02 Python
详解Python发送email的三种方式
2018/10/18 Python
Python3 max()函数基础用法
2019/02/19 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
经典c++面试题四
2015/05/14 面试题
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
优秀幼教自荐信
2014/02/03 职场文书
21岁生日感言
2014/02/27 职场文书
海飞丝的广告词
2014/03/20 职场文书
环境建议书
2015/02/04 职场文书
语文教师求职信范文
2015/03/20 职场文书
学校证明范文
2015/06/24 职场文书
2016七一建党节慰问信
2015/11/30 职场文书