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 相关文章推荐
在Django的URLconf中使用命名组的方法
Jul 18 Python
pandas 将索引值相加的方法
Nov 15 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 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
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
实例讲解python函数式编程
2014/06/09 Python
Python库urllib与urllib2主要区别分析
2014/07/13 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
pandas数据处理之绘图的实现
2020/06/15 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
大专生简历的自我评价
2013/11/26 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
学习型班组申报材料
2014/05/31 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
新年祝酒词大全
2015/08/11 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript