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上基于Markov链生成伪随机文本的教程
Apr 17 Python
浅析python递归函数和河内塔问题
Apr 18 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
pandas数据集的端到端处理
Feb 18 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
基于python3实现倒叙字符串
Feb 18 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
Django 实现jwt认证的示例
Apr 30 Python
PyTorch的Debug指南
May 07 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写的采集程序
2007/03/16 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
Python验证码识别的方法
2015/07/10 Python
使用Python对SQLite数据库操作
2017/04/06 Python
python抖音表白程序源代码
2019/04/07 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
年度考核评语
2014/01/19 职场文书
感恩节活动方案
2014/01/27 职场文书
高三体育教学反思
2014/01/29 职场文书
仓管岗位职责范本
2014/02/08 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
2016年安全月活动总结
2016/04/06 职场文书