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标准库与第三方库详解
Jul 22 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
python如何使用unittest测试接口
Apr 04 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
python实现AES加密与解密
Mar 28 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
python多线程扫描端口(线程池)
Sep 04 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
python 中的jieba分词库
Nov 23 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
Move.js入门
2017/02/08 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python标准库内置函数complex介绍
2014/11/25 Python
Python检测QQ在线状态的方法
2015/05/09 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
python实现石头剪刀布小游戏
2021/01/20 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
CSS3实现swap交换动画
2016/01/19 HTML / CSS
幼儿园春季开学寄语
2014/04/03 职场文书
食品安全责任书
2014/04/15 职场文书
终止合同协议书
2014/04/17 职场文书
植树节标语
2014/06/27 职场文书
清洁工个人总结
2015/03/04 职场文书
python urllib库的使用详解
2021/04/13 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL