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 httplib模块使用实例
Apr 11 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
python使用opencv对图像mask处理的方法
Jul 05 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
Python求平面内点到直线距离的实现
Jan 19 Python
Python读取表格类型文件代码实例
Feb 17 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
Python3如何使用tabulate打印数据
Sep 25 Python
scrapy头部修改的方法详解
Dec 06 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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 远程图片保存到本地的函数类
2008/12/08 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
PHP.vs.JAVA
2016/04/29 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
python多线程http下载实现示例
2013/12/30 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
大学学年自我鉴定
2013/10/28 职场文书
岗位职责怎么写
2014/03/14 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
停发工资证明范本
2015/06/12 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书