Unittest单元测试框架之认识unittest-认识单元测试
off999 2025-05-21 15:44 6 浏览 0 评论
对于不熟悉编程的测试新手来讲,单元测试是个听起来高大上的话题,貌似只有高级测试或开发人员才能胜任这项工作。其实,它并非想象得那么高级,我们通过实例慢慢揭开它神秘的面纱。
可能读者还有个疑问,我们不是在学Web自动化么?为什么要去学习单元测试框架,其实单元测试框架并非只能用于代码级别的测试,对于单元测试框架来讲,笔者认为它主要完成以下三件事。
提供用例组织与执行:当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用堆砌在一起,就产生了扩展性与维护性等问题,此时需要考虑用例的规范与组织问题了。单元测试框架就是用来解决这个问题的。
提供丰富的比较方法:不论是功能测试,还是单元测试,在用例执行完成之后都需要将实际结果与预期结果进行比较(断言),从而判定用例是否执行通过。单元测试框架一般会提供丰富的断言方法。例如,判断相等/不但能、包含/不包含、True/False的断言方法等。
提供丰富的日志:当测试用例执行失败时抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。例如,总执行时间、失败用例数、成功用例数等。
一般的单元测试框架都会提供这些功能,从范元测试框架的这些特性来看,它同样适用于Web自动化用例的开发与执行。
认识unittest
什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。在Python语言下有诸多单元测试框架,如doctest、unittest、pytest、nose等,unittest框架(原名PyUnit框架)为Python语言自带的单元测试框架,Python2.1及其以后的版本已将unittest作为一个标准模块放入Python开发包中。
认识单元测试
可能读者会问不用单元测试框架能写单元测试么?答案是肯定的,单元测试本身就是通过一段代码去验证另一段打开,所以不用单元测试框架也可以写单元测试,下面就通过例子演示不用测试框架的单元测试。
首先创建一个被测试类calculator.py
程序非常简单,创建一个Count类用于两个整数的计算,通过__init__()方法对两个数进行初始化,接着创建add()方法返回两个数相加的结果。
根据上面所实现的功能,不用测试框架所编写的单元测试如test.py
首先,引入calculator文件中的Conut类;然后在test_add()方法中调用Count类并传入两个参数2和3;最后调用Count类中的add()方法对两个参数做假发运行,并通过assert()方法判断add()的返回值是否等于5.如果不相等则抛出自定义的“Integer addition result error!”异常信息,如果相等则打印“Test pass!”
首先,测试程序的写法没有一定的规范可以遵循,是个程序员完全可以能写出始终不同的测试程序来,不统统一的代码维护起来十分麻烦。其次,需要编写大量的辅助代码才能进行单元测试,在test.py中用于测试的代码甚至比被测试的代码还要多,而且这仅仅是一个测试用,对一个单元模块来说,只编写一条测试用例显然是不够的。
为了让单元测试代码更容易维护和编写,最好的方式是遵循一定的规范来编写测试用例,这也是单元测试框架诞生的初衷。接下来讲如何通过unittest单元测试框架编写单元测试用例。
分析上面的代码,首先引入unittest模块,创建TestCount类继承unittest的TestCase类,我们可以将TestCase类堪称是对特定类进行测试的集合。
setUp()方法用于测试用例执行前的初始化工作,这里只简单打印“test start”信息。tearDown()方法与setUp()方法相呼应,用于测试用例执行之后的善后工作(如退出操作),这里打印“test end”信息。
在test_add()中首先调用Count类并传入要计算的数,通过调用add()方法得到两数相加的返回值。这里不再使用繁琐的异常处理,而是调用unittest框架所提供的assertEqual()方法对add()的返回值进行断言,判断两者是否相等,assertEqual()方法由TestCase类继承而来。
unittest提供了全局的main()方法使用它可以方便地将一个单元测试模块变成可以直接运行的测试脚本。main()方法使用TestLoader类来搜索所有半酣在该模块中的”test”命名开头的测试方法,并自动执行它们。
相关推荐
- Java反射机制终极指南:从基础到高级应用
-
反射(Reflection)是Java语言中一个强大而复杂的特性,它允许程序在运行时获取类的内部信息,并能直接操作对象的内部属性和方法。本文将系统性地介绍Java反射机制,从基础概念到高级应用,通过大...
- python反射本质、属性访问规则常见应用案例
-
在Python中,反射是指通过名称字符串来访问、检查和操作对象的能力。Python提供了一些内置函数和特殊方法,使得可以在运行时进行反射操作。而属性访问规则是指Python解释器在访问对象的属性时的查...
- python中的反射机制详解,web后端路由分发的实现原理
-
一.什么是python的反射机制?python的反射机制,核心就是利用字符串去已存在的模块中找到指定的属性或方法,找到方法后自动执行,基于字符串的事件驱动!这也是python强大的自省能力!在Dja...
- Python 知识点 #39 - 反射(Reflection)
-
在Python中,我们可以使用反射(Reflection)来动态地获取、修改和调用对象的属性和方法。反射是一种强大的机制,它允许我们在运行时检查和操作对象的特性,而不需要提前了解对象的结构。在Pyth...
- python反射机制学习总结
-
一、反射概念理解因为python是动态语言,只要是动态语言就一定会有反射机制。反射机制含义:在程序运行过程中,动态获取对象的信息,以及动态调用对象方法的功能。所以我们需要在程序运行过程中,让程序自己能...
- python中反射的使用
-
1.动态属性访问classTestClass:def__init__(self):self.name1='test1'self.n...
- Python 开发者必会的 5 个反射技巧
-
什么是反射?反射,简单来说,就是在程序运行时,能够动态地获取对象的信息,包括属性和方法,并且可以对这些属性和方法进行操作。这就好比你有一个神秘的盒子,在运行程序之前,你并不知道盒子里装了什么,但通过反...
- Python 反射机制:深入解析动态访问的奥秘
-
阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。如需转载请附上本文源链接!在Python世界里,反射(Reflection)是一种强大的机制,它让我们可以在...
- Python学习教程:一篇文章告诉你,什么是Python反射机制
-
什么是反射机制?反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!先来介绍...
- 金字塔测试原理:写好单元测试的8个小技巧,一文总结
-
想必金字塔测试原理大家已经很熟悉了,近年来的测试驱动开放在各个公司开始盛行,测试代码先写的倡议被反复提及。鉴于此,许多中大型软件公司对单元测试的要求也逐渐提高。那么,编写单元测试有哪些小技巧可以借鉴和...
- Python 标准库
-
Python的标准库非常丰富,如下面列出的内容所示,其提供了非常多的功能。库包含内置模块(用C编写的)提供访问系统的功能,如文件I/O,以及在为发生在日常编程中的许多问题提供标准化的解决方...
- Python流式JSON解析器:实时解析大模型数据,兼容非标准语法
-
在人工智能和大模型(LLM)快速发展的今天,处理实时生成的不完整JSON数据成为开发者的一大挑战。传统JSON解析器往往需要完整的数据才能工作,但大模型生成的数据可能逐块输出,甚至包含非标准语法。为此...
- python 进阶突破——内置模块(Standard Library)
-
Python提供了丰富的内置模块(StandardLibrary),无需安装即可直接使用。以下是一些常用的内置模块及其主要功能:1.文件与系统操作os:操作系统交互importosos.ge...
- VS Code Python测试入门:从零开始的完全图解教程
-
引言在现代软件开发中,测试是保障代码质量的关键环节之一。无论是单元测试、集成测试还是端到端测试,良好的测试策略都可以帮助开发者快速发现问题,减少后期维护成本。对于Python开发者来说,Visual...
- TestNG学会了,Java单元测试你就掌握了一半
-
TestNG01简介在日常测试工作中,经常需要用写代码和脚本来完成一些测试任务,比如自动化测试,接口测试,单元测试等。当写完若干脚本后,需要对这些脚本进行组织、管理和结果统计,这个时候就需要有一个工...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)