如何使用unittest和pytest进行python脚本的单元测试
1. 关于unittest和pytest
unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试
代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。
pytest是第三方支持单元测试的扩展库,他和unittest配合,可以使你在为一个新的源码文件编写测试代码时,不用手动定义程序入口,以及要执行哪些表示测试的函数或类。你只需按照一个”套路“写测试代码,它会帮你运行测试,汇总测试结果(覆盖率,通过率等等)
2. 单元测试代码的编写
假设我有一个名为”X.py"的脚本文件,其中定义了一个名为A的类,我想对A中的方法add和mult进行测试:
class A:def fun(a:int,b:int)->int:return a+bdef multi(a:int,b:int)->int:return a*b
则推荐的编写测试A的流程如下:
2.1 新建一个名为test_A.py文件
这个文件用于存放对A这个类进行单元测试的代码。一般来说,建议把你项目中所有测试模块文件都放到项目根目录下的tests目录中,便于维护。
2.2 在test_A.py文件中定义测试类(继承unittest.TestCase)
from unittest import TestCase
class TestA(TestCase):def setUp(self):"""所有以test_开头的方法执行之前都会调用该方法,通常在这个方法中创建一个或若干你要测试的类的实例"""...self.obj_a = A(...)...def test_add(self):result = self.obj_a.add(3,5)self.assertEqual(result,8) #检测结果是否为期望值8,若不是,该测试方法不通过def test_multi(self):result = self.obj_a.multi(4,5)self.assertEqual(result,20) #功能与上类似,TestCase还提供了很多其他以assert为前缀的方法,满足我们将实际运行结果与期望值比较的需求。
2.3 运行测试代码文件,查看测试结果
如果不使用pytest扩展库,你还需要写一段样板代码,类似如下:
def main():...test_a = TestA()test_a.test_add()test_a.test_multi()...
这令人烦恼。好在pytest让你可以省去这个麻烦,只要你安装好了pytest,那么,可以采取两种方法运行测试:
方法1:命令行运行pytest执行单元测试
方法2:在pycharm环境执行单元测试
2.3.1 在命令行下允许pytest单元测试
命令行下,进入tests目录,执行如下命令:
pytest
即可看到所有以test_开头的方法或函数的执行过程及结果。
记住,最好是虚拟环境下安装包括pytest在内的各种扩展库。
2.3.2 在pycharm IDE下运行测试
这个非常方便,打开测试脚本文件,单击下图所示的运行按钮,即可出现测试结果。

相关文章:
如何使用unittest和pytest进行python脚本的单元测试
1. 关于unittest和pytest unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试 代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。 pytest是第三方…...
Java中的值传递与引用传递
Java中的值传递与引用传递 在Java编程中,理解值传递与引用传递的概念是编写无误代码的关键。这两个概念有时会让人感到困惑,特别是当它们与对象有关时。现在,我们将一步步地解释这两个概念,帮助你彻底理解它们。 1. 值传递与引用…...
Seaborn库
目录 主要功能和特点 使用方法 实例应用 Seaborn库的最新版本有哪些新功能和改进? 如何在Seaborn中实现复杂的数据预处理步骤,例如数据清洗和转换? Seaborn与其他数据可视化库(如Matplotlib、Plotly)相比有哪些优…...
openresty整合modsecurity
安装依赖包 安装依赖 yum -y install gcc-c flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel libtool libxml2-devel libxslt-devel安装依赖包 ftp://ftp.icm.edu.pl/vol/rzm7/linux-centos-vault/7.8.2003/sclo/x86_64/rh/Packages/d/devtools…...
结构体structure、共用体union
目录 结构体 结构体类型的定义形式 结构体类型的大小 内存计算例子 共用体union 用共用体判断大小端 结构体和共用体对比 qsort() 结构体 结构体类型——用来描述复杂数据的一种数据类型 构造类型(用户自定义类型) struc…...
Spring自动注册-<bean>标签和属性解析
xml文件中最常见也最核心的就是<bean>,<Import>,<beans>,<alias>标签,关于它们的解析主要是BeanDefinitionParserDelegate类中.<bean>标签的解析最为复杂和重要. <bean>标签 processBeanDefinition(ele, delegate)方法中,主要是是对…...
【仿RabbitMQ消息队列】基于C++11中packaged_tack异步线程池
目录 什么是同步和异步? future 使用future和async配合管理异步任务 使用promise和future配合管理异步任务 使⽤std::packaged_task和std::future配合 C11异步线程池 什么是同步和异步? 同步(Synchronous) 同步编程是指程…...
免费下载专利
给大家提供一个可以免费下载专利的地方 链接:https://www.drugfuture.com/cnpat/cn_patent.asp...
CentOS7安装流程步骤详细教程
1. 简介 1.1. 概述 CentOS 7是一款基于Red Hat Enterprise Linux(RHEL)的开源Linux发行版,它提供了一个稳定、安全、高效的操作系统,适用于企业级应用、服务器、云计算等领域。CentOS 7以其高度的稳定性和安全性而闻名,它广泛应用于各种行业和领域,包括政府、金融、医疗、…...
【大模型从入门到精通17】openAI API 构建和评估大型语言模型(LLM)应用5
这里写目录标题 理论问题:实践问题:理论实践 理论问题: 1.描述评估LLM应用程序输出的重要性,并提及至少三个维度,这些输出应该在这几个维度上被评估。 2.解释在评估LLM应用程序时开发稳健的性能指标的作用,…...
苹果手机无iCloud备份下“最近删除”照片的恢复策略
iPhone最近删除清空了照片还能恢复吗?大家都知道,照片对于我们来说是承载着美好回忆的一种形式。它记录着我们的平淡生活,也留住了我们的美好瞬间,因此,具有极其重要的纪念价值。但由于我们的失误操作导致照片被删除&a…...
Docker搭建Minio容器
Docker搭建Minio容器 前言 在上一集我们介绍了分布式文件存储行业解决方案以及技术选型。最终我们决定选用Minio作为分布式文件存储。 那么这集我们就在Docker上搭建Minio容器即可。 Docker搭建Minio容器步骤 创建Minio文件目录 我们选择创建/minio/data目录 修改目录权…...
【C++】多源BFS问题和拓扑排序
目录 多源BFS介绍 单源BFS和多源BFS的区别 SO如何解决多源BFS问题 多源之核心 矩阵 算法思路 代码实现 飞地的数量 算法思路 代码实现 地图中的最高点 算法思路 代码实现 地图分析 算法思路 代码实现 拓扑排序介绍 有向无环图 编辑 如何解决这类问题 课…...
CentOS 7 安装详细教程
大家好,我是程序员小羊! 前言: CentOS 7 是一个稳定的企业级 Linux 发行版,广泛用于服务器环境。CentOS 7 是基于 Red Hat Enterprise Linux (RHEL) 构建的企业级 Linux 发行版,提供免费的、开源的操作系统…...
mybatis-plus + springboot 多对多实例
在MyBatis Plus中,自动填充数据是一种非常实用的功能,它可以自动地为一些字段设置默认值,比如创建时间和更新时间。对于多对多关系来说,虽然自动填充主要针对单一实体的字段,但在某些情况下,你可能也需要在…...
SpringBoot日志整合
Spring Boot 整合日志框架的核心是通过 spring-boot-starter-logging 依赖来实现的,它默认整合了 Logback 日志框架。 Spring Boot 对各种日志框架进行了自动配置,使得我们可以很容易地在 Spring Boot 应用中使用日志。 Spring Boot 在类路径下寻找 Log…...
信创教育:培养未来科技创新的生力军
随着全球数字化转型的加速,信息技术应用创新(简称“信创”)产业作为推动国家信息技术自主可控和产业升级的关键领域,正迎来前所未有的发展机遇。信创教育,作为培养未来科技创新生力军的重要阵地,其重要性和…...
slowfast
核心网络网络架构: 1、分别获取高频和低频图像数据 2、分别进行特征提取 3、特征融合 4、预测 网络结构细节:...
怎么调试python脚本
打开pycharm community 2019.1软件,创建一个项目。 创建一个py后缀的文件作为示范,文件名自己定义。 编写代码,然后右键点击进行运行,查看一下是否有问题。 点击右上角的虫子图标,然后下面会有控制面板出来,…...
Flask获取请求信息
示例代码 from flask import Flaskapp = Flask(__name__)if __name__ == "__main__": app.run(debug=True) 1、获取请求头 from flask import request@app.route("/headers", methods=["GET"])def get_headers(): headers = request.heade…...
OpenClaw多模型管理:同时接入百川2-13B-4bits与其他开源大模型
OpenClaw多模型管理:同时接入百川2-13B-4bits与其他开源大模型 1. 为什么需要多模型管理? 去年冬天,我尝试用OpenClaw自动化处理一批技术文档的翻译和摘要任务时,遇到了一个典型问题:当处理简单段落翻译时࿰…...
3个核心价值重塑漫画阅读体验:Venera跨平台漫画阅读器全面解析
3个核心价值重塑漫画阅读体验:Venera跨平台漫画阅读器全面解析 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 当你在手机上读到精彩漫画章节却不得不中断通勤,回家后打开电脑却要重新寻找上次阅读位置…...
第一批“首席龙虾官”,月薪6万
鱼羊 发自 凹非寺量子位 | 公众号 QbitAI当你以为🦞还是大家伙业余养养的新鲜玩具,已经有公司正经在招「龙虾官」了。(doge)随便打开一个招聘网站一搜,你别说,你还真别说,「OpenClaw」标签下的在…...
效率直接起飞!盘点2026年全民喜爱的的AI论文写作工具
一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂的AI论文写作工具,实测提速效果惊人,覆盖选题、文献、写作、降重、排版全流程,让你高效搞定论文不再难。 一、全流程王者:一站式搞定论文全链路(一天定稿首选&…...
asp毕业设计下载(全套源码+配套论文)——基于asp+access的仓储物流管理系统设计与实现
基于aspaccess的仓储物流管理系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于aspaccess的仓储物流管理系统设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于aspaccess的仓储物流管理系统…...
OpenClaw对比测试:Qwen3.5-9B与其他模型在自动化任务中的表现
OpenClaw对比测试:Qwen3.5-9B与其他模型在自动化任务中的表现 1. 测试背景与实验设计 最近在搭建个人自动化工作流时,我遇到了一个关键问题:OpenClaw框架下究竟该选择哪个大模型作为决策核心?为了找到答案,我花了三天…...
终极指南:深入解析Material Library架构与模块依赖关系
终极指南:深入解析Material Library架构与模块依赖关系 【免费下载链接】material A library to bring fully animated Material Design components to pre-Lolipop Android. 项目地址: https://gitcode.com/gh_mirrors/mate/material Material Library是一…...
戴尔Precision Pro商务笔记本回归,新一代产品聚焦便携性
看起来2026年是戴尔按下重启键的一年——在消费者和商用产品线中,戏剧性的品牌重塑都在被回归。有时候,老品牌确实是好品牌:熟悉的XPS名称和设计今年回归是有原因的,绝对不是因为戴尔Premium有正面的品牌认知度。在戴尔商务产品方…...
在RK3576开发板上手把手编译并运行你的第一个MPP编码程序(含VSCode配置避坑)
在RK3576开发板上从零构建MPP编码开发环境的完整指南 1. 开发环境准备与交叉编译工具链配置 对于嵌入式开发者而言,RK3576开发板的MPP开发环境搭建需要从基础工具链开始。不同于x86平台的开发,我们需要特别注意交叉编译环境的配置细节。 首先需要获取适用…...
Flutter透明视频播放实战:用AlphaPlayer插件5分钟搞定礼物特效
Flutter透明视频播放实战:用AlphaPlayer插件5分钟搞定礼物特效 在移动应用开发中,炫酷的动画效果往往能显著提升用户体验,尤其是在社交、直播和游戏类应用中。透明视频特效作为其中一种高级表现形式,能够实现元素与背景的无缝融合…...
