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 06 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
python如何从文件读取数据及解析
Sep 19 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
Python 在局部变量域中执行代码
Aug 07 Python
Python 实现PS滤镜的旋涡特效
Dec 03 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 进度条实现代码
2009/03/10 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP代码优化的53个细节
2014/03/03 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
符合标准的js表单提交的代码
2007/09/13 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Django stark组件使用及原理详解
2019/08/22 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
文秘专业应届生求职信范文
2013/11/14 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
软件售后服务承诺书
2014/05/21 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
四年级数学教学反思
2016/02/16 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL