位置: 编程技术 - 正文

深入理解Python单元测试unittest的使用示例(深入理解python特性pdf百度云)

编辑:rootadmin

推荐整理分享深入理解Python单元测试unittest的使用示例(深入理解python特性pdf百度云),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python的了解,深入理解python特性pdf百度云,深入理解python特性,深入理解python特性,python深入浅出,深入python3,python的理解,python的理解,内容如对您有帮助,希望把文章链接给更多的朋友!

软件测试

大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施。正像软件熵(software entropy)所描述的那样:一个程序从设计很好的状态开始,随着新的功能不断地加入,程序逐渐地失去了原有的结构,最终变成了一团乱麻(其实最初的"很好的状态"得加个问号)。测试的目的说起来其实很简单也极具吸引力,那就是写出高质量的软件并解决软件熵这一问题。

可惜的是,软件开发人员很少能在编码的过程中就进行软件测试,大部分软件项目都只在最终验收时才进行测试,有些项目甚至根本没有测试计划!随着软件质量意识的增强,许多软件开发组织开始转向UML、CMM、RUP、XP等软件工程方法,以期提高软件质量,并使软件开发过程更加可控,好在这些方法对测试都提出了很严格的要求,从而使得测试在软件开发过程的作用开始真正体现出来。

软件测试作为一种系统工程,涉及到整个软件开发过程的各个方面,需要管理人员、设计人员、开发人员和测试人员的共同努力。作为软件开发过程中的主要力量,现今的程序员除了要编写实现代码外,还承担着单元测试这一艰巨任务,因此必须采用新的工作模式:

编写和维护一套详尽的单元测试用例; 先构造单元测试和验收测试用例,然后再编写代码; 根据构造的测试用例来编写代码。

单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。由于软件模块并不是一个单独的程序,为了进行单元测试还必须编写大量额外的代码,从而无形中增加了开发人员的工作量,目前解决这一问题比较好的方法是使用测试框架。测试框架是在用XP方法进行单元测试时的关键,尤其是在需要构造大量测试用例时更是如此,因为如果完全依靠手工的方式来构造和执行这些测试,肯定会变成一个花费大量时间并且单调无味的工作,而测试框架则可以很好地解决这些问题。

单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西。但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样的彰显你的实力。如此多的框架和工具,很容易让人困惑,困惑的原因是因为并没有理解它的基本原理,如果一些基本的概念都不清楚,怎么能够写出思路清晰的测试代码?

今天的主题就是unittest,作为标准python中的一个模块,是其它框架和工具的基础,参考资料是它的官方文档: the bar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。

在文档的开篇就介绍了unittest中的4个重要的概念:test fixture, test case, test suite, test runner,我觉得只有理解了这几个概念,才能真正的理解单元测试的基本原理,下面就主要围绕这几个概念来展开这篇文章。

首先通过查看unittest的源码,来看一下这几个概念,以及他们之间的关系,他们是如何在一起工作的,其静态类图如下:

一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

而多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

深入理解Python单元测试unittest的使用示例(深入理解python特性pdf百度云)

TestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

TextTestRunner是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。

测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

这样整个流程就清楚了,首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。

现在已经涉及到了test case, test suite, test runner这三个概念了,还有test fixture没有提到,那什么是test fixture呢??在TestCase的docstring中有这样一段话:

Test authors should subclass TestCase for their own tests. Construction and deconstruction of the test's environment (‘fixture') can be implemented by overriding the ‘setUp' and ‘tearDown' methods respectively.

可见,对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp()中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大,以后会介绍到。

至此,概念和流程基本清楚了,下面通过简单的例子再来实践一下,就拿unittest文档上的例子吧:

TestSequenceFunctions继承自unittest.TestCase,重写了setUp()方法,并且定义了三个以'test'开头的方法,那这个TestSequenceFunctions类到底是个什么呢?它是一个测试用例,还是三个测试用例?说是三个测试用例的话,它本身继承自TestCase,说是一个测试用例的话,里面又有三个test_*()方法,明显是三个测试用例。其实,我们只要看一些TestLoader是如何加载测试用例的,就一清二楚了,在loader.TestLoader类中有一个loadTestsFromTestCase()方法:

getTestCaseNames()是从TestCase这个类中找所有以“test”开头的方法,然后注意第9行,在构造TestSuite对象时,其参数使用了一个map方法,即对testCaseNames中的每一个元素,使用testCaseClass为其构造对象,其结果是一个TestCase的对象集合,可以用下面的代码来分步说明:

可见,对每一个以test开头的方法,都为其构建了一个TestCase对象,值得注意的是,如果没有定义test开头的方法,而是将测试代码写到了一个名为runTest的方法中,那么会为该runTest方法构建TestCase对象,如果定义了test开头的方法,就会忽略runTest方法。

至此,基本就清楚了,每一个以test开头的方法,都会为其构建TestCase对象,也就是说TestSequenceFunctions类中其实定义了三个TestCase,之所以写成这样,是为了方便,因为这几个测试用例的fixture是相同的,如果每一个测试用例单独写成一个TestCase的话,会有很多的冗余代码。

明白了这些,文档就可以很轻松的看懂了,至于怎么运行测试用例,以及其他的内容,直接看文档吧。

标签: 深入理解python特性pdf百度云

本文链接地址:https://www.jiuchutong.com/biancheng/372288.html 转载请保留说明!

上一篇:Python及PyCharm下载与安装教程(pycharm下载安装)

下一篇:python+selenium实现京东自动登录及秒杀功能(python selenium原理)

  • 小规模纳税人的进项税额怎么处理
  • 出口企业何时选择免(征)税申报方式?
  • 税前利润计算公式变动成本法
  • 什么是增值税发票图片
  • 企业境外投资管理办法
  • 一般纳税人什么条件
  • 业务招待费进项税额转出表二
  • 委外加工怎么做仓库账
  • 中小企业工会经费怎么算
  • 核定征收的小规模企业所得税B表收入总额含税吗
  • 统借统还资金管理办法
  • 已提足折旧的固定资产残值怎么处理
  • 无形资产发生减值的原因
  • 销项发票采集不出来怎么回事
  • 民营医院增值税政策
  • 绿化养护按什么项目交增值税
  • 应收账款周转率高好还是低好
  • 增值税减免的账务处理可以直接应交税费减免税款吗
  • 记账凭证的分类和基本内容
  • 高危行业企业要设置什么机构
  • 收入未实现成本怎么进
  • 怎么查询企业的注册资金
  • 苗木公司经营理念
  • 补缴公积金账务处理
  • windows预览体验计划选哪个渠道
  • 美团收入怎么处理的?
  • 预付款未收到发票如何做账
  • 银行拒付汇票金额的救济方法
  • linux模块的概念
  • 外籍人员个人所得税计算
  • SetPoint.exe - SetPoint是什么进程 有什么用
  • 开机要按f1才能启动
  • 城市赚钱项目
  • 什么情况需要缴纳增值税
  • 怎么计提企业所得税
  • 自建办公楼装修效果图
  • 人工智能示例
  • 比斯蒂荒野上的“外星孵化场”,新墨西哥州 (© Ian Shive/Tandem Stills + Motion)
  • php pdo连接sqlserver
  • PHP jQuery+Ajax结合写批量删除功能
  • 税控盘干嘛用
  • 图像识别算法
  • 朝夕教育怎么样
  • Vue3+TypeScript+Vite如何使用require动态引入类似于图片等静态资源
  • css page-break-after
  • 运输发票税金如何入账
  • 临时设施账务处理分录
  • 2201应付职工薪酬
  • 坏账核销的会计处理
  • 税务新增办税人员
  • 视同销售的情况是?
  • 进项转出转到哪里去
  • 车辆购置税如何账务处理
  • 电商平台 流量
  • 冲暂估费用
  • 房地产企业简易计税和一般计税的区别
  • 一张凭证上可以写多个摘要吗
  • 小微企业免征的增值税属于政府补助吗
  • 专项应付款贷方余额表示
  • 出口货物发生退运损失由外贸承担还是厂家
  • 没有发票的费用怎么入账
  • 利润表中财务费用中的利息费用和利息收入
  • 税务局三代手续费是什么
  • 什么企业可以开培训费发票
  • 私企会计一般一个月多少钱
  • linux实现mysql数据库每天自动备份定时备份
  • win10系统如何查看显卡配置
  • 万能重装系统
  • linux文本文件格式
  • win10一周年深色主题
  • [置顶]公主大人接下来是拷问时间31
  • nodejs入门教程
  • windows的安装类型
  • 创建一个新用户user1,设置其主目录为/home/user1:
  • jQuery处理XML文件的几种方法
  • python数学题
  • 河南省税务总局网站官网
  • 停车票日期在哪里
  • 北京地税咨询热线
  • 北京的个人所得税怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设