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 快速实现CLI 应用程序的脚手架
Dec 05 Python
scrapy爬虫完整实例
Jan 25 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
Python异常处理机制结构实例解析
Jul 23 Python
Python容器类型公共方法总结
Aug 19 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
在PHP中使用redis
2013/11/04 PHP
分享PHP守护进程类
2015/12/30 PHP
PHP安全下载文件的方法
2016/04/07 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
javascript里的条件判断
2007/02/27 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vue实现多级菜单效果
2019/10/19 Javascript
vuex存储token示例
2019/11/11 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
python爬取m3u8连接的视频
2018/02/28 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python与mysql数据库交互的实现
2020/01/06 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
行政经理岗位职责
2013/11/09 职场文书
店长岗位的工作内容
2013/11/12 职场文书
语文教学感言
2014/02/06 职场文书
《画风》教学反思
2014/04/16 职场文书
经营理念标语
2014/06/21 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
民事二审代理词
2015/05/25 职场文书