Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分

前言

本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。

根据模块知识,一次讲解单个或者多个模块的内容。

教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html

质量控制

质量控制(Quality Control, QC),主要关注于提高代码质量、确保数据准确性和程序稳定性。

代码质量与风格

在软件开发中,代码质量与风格是维护项目长期健康发展的基石。
遵循良好的编程规范不仅能够提升代码的可读性和可维护性,还能促进团队成员之间的有效协作。

关于代码质量与风格的三部分,之前已经记录完了两部分,这里最后讲下单元测试的部分。

单元测试

单元测试是软件开发中的一种测试方法,主要用于验证代码的最小可测试单元(通常是函数或方法)是否按预期工作。在Python中,单元测试是保证代码质量、促进可持续开发的重要实践。

unittest

unittest是Python标准库中的单元测试框架,提供了编写测试用例、组织测试、运行测试和断言等基本功能。支持测试自动化和报告生成,是进行单元测试的首选工具之一

基本用法:

  • 编写测试用例: 通过继承unittest.TestCase类并定义测试方法(方法名以test_开头)。
  • 断言: 使用如assertEqual, assertTrue, assertFalse等方法来验证预期结果与实际结果是否相符。
  • 测试套件与运行: 可以将多个测试用例组织成测试套件(unittest.TestSuite),并通过unittest.main()或直接调unittest.TextTestRunner().run(suite)来执行测试。

优点

  • 标准库的一部分:无需安装额外包,开箱即用。
  • 丰富的断言方法:提供了多种断言方法来验证测试结果,如 assertEqual, assertTrue, assertRaises 等。
  • 测试组织结构:支持将测试用例组织成类和模块,便于管理和维护。
  • 测试固件:通过 setUp 和 tearDown 方法可以在每个测试前后执行初始化和清理操作,保持测试环境的一致性。
  • 测试套件:可以将多个测试用例组合成测试套件,一次性执行。
  • 文本和HTML报告:自动生成测试执行的文本或HTML报告,方便查看测试结果。
常用类及函数

TestCase 类

用途:unittest.TestCase 是 Python 标准库 unittest 框架中的基础类,所有自定义测试用例应继承于此。它提供了编写和组织测试的基本结构。

  • setUp():
    • 功能:在每个测试方法(test_XXX)运行之前被自动调用。
    • 用途:用于设置测试环境,如初始化对象、连接数据库等,确保每个测试用例开始时处于一个已知的状态。
  • tearDown():
    • 功能:在每个测试方法运行之后被自动调用。
    • 用途:用于清理测试过程中产生的副作用,如关闭文件、断开数据库连接等,以确保测试之间相互独立,不影响彼此的结果。

断言方法

  • assertEqual(a, b):
    • 功能:验证 a 和 b 是否相等,如果不等则测试失败。
  • assertTrue(x):
    • 功能:验证表达式 x 是否为 True,如果为 False 则测试失败。
  • assertFalse(x):
    • 功能:验证表达式 x 是否为 False,如果为 True 则测试失败。
  • assertRaises(exception, callable, *args, kwargs):
    • 功能:验证调用 callable(*args, **kwargs) 是否会抛出指定类型的 exception。如果未抛出异常或抛出的异常类型不匹配,则测试失败。

TestSuite 类

用途:用于组织和集合多个测试用例(TestCase实例)或测试类,使得可以一次性运行多个测试,便于管理和自动化测试流程。

TextTestRunner 类

用途:负责执行测试套件(TestSuite),并生成易于阅读的文本格式的测试结果报告。它是测试执行的驱动器,通常用于控制测试的运行,并将测试结果输出到控制台或其他文本流。

  • run(test):运行给定的测试用例或测试套件,并返回一个包含测试结果的 TestResult 对象。

通过组合 TestCase、setUp、tearDown、断言方法、TestSuite 以及 TextTestRunner,可以构建强大的自动化测试框架,有效提升软件的质量保证能力。

代码示例
import unittest# 假设有一个 Calculator 类
class Calculator:def add(self, a, b):return a + b# 测试类,继承自 unittest.TestCase
class ExampleTest(unittest.TestCase):# 初始化测试环境def setUp(self):self.calc = Calculator()# 清理测试环境def tearDown(self):del self.calc# 测试加法功能def test_add(self):result = self.calc.add(10, 5)self.assertEqual(result, 15, "加法计算错误,预期结果为15")# 测试加法功能,预期失败的例子def test_add_failure_example(self):result = self.calc.add(10, 5)self.assertEqual(result, 20, "此测试预期失败,因为预期结果设置错误")if __name__ == '__main__':# 创建测试套件suite = unittest.TestLoader().loadTestsFromTestCase(ExampleTest)# 使用 TextTestRunner 运行测试runner = unittest.TextTestRunner(verbosity=2)runner.run(suite)

大家看代码,这是比较简单的一个测试用例的例子。测试了一个加法的函数,分别用两个断言,一个是正确答案一个是错误答案,然后是用测试套件将两个测试方法一起执行返回结果。

重点在创建测试套件的那行代码,那行代码做了什么呢?

  1. 创建一个TestLoader对象,该对象负责加载测试用例。
  2. 使用loadTestsFromTestCase方法将ExampleTest测试用例加载到测试套件中。
  3. 将加载的测试用例返回给suite变量。
    简单点说,就是unittest.TestLoader().loadTestsFromTestCase()这个函数,会自动找到ExampleTest这个类里面所有test开头的函数作为测试用例返回给变量suite,这个变量的值,实际是一个测试套件。
    最后就是执行测试套件跑测试用例就好了。

执行结果如下:
在这里插入图片描述
通过执行结果很清楚的能看到,执行了两个测试用例,最终失败了一个并打印了开始设定的提示语。

在这里插入图片描述
在这张图片所代表的代码中,我们将估计设定失败的测试用例的函数名去掉了test,同样执行测试套件,发现执行了一个测试用例,同时是成功的,也就是第一个测试用例。

结尾

代码质量和风格就先学到这里,后面学习数据质量,包括数据清洗,验证,检测等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【浦语大模型开源探索】InternLM实战营第二期:技术笔记与全链路解析

本次课程链接在GitHub上: InternLM/Tutorial at camp2 (github.com) 第一次课程录播链接: 书生浦语大模型全链路开源体系_哔哩哔哩_bilibili InternLM2技术报告: arxiv.org/pdf/2403.17297.pdf 一、书生浦语大模型全链路开源体系笔记 Int…

太速科技-FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡

FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡 一、板卡概述 本子卡基于FMC连接器实现4路125M采样率AD输出,两路1G采样率DA输出子卡,板卡默认由FMC连接器12V供电,支持外参考时钟,外输入时钟,外触发。 …

交互未来入选“北京市通用人工智能产业创新伙伴计划”模型伙伴

在“开启数智新时代,共享数字新未来”的宏大主题下,2024全球数字经济大会于近日盛大开幕,汇聚全球智慧,共谋数字经济新篇章。大会首日,备受瞩目的人工智能专题论坛率先拉开帷幕,以“应用即未来——大模型赋…

视频太大发不出去怎么处理,视频太大发不了邮件怎么办

在数字化时代,视频已成为我们分享生活、传递信息的重要方式。然而,当遇到视频文件过大,无法发送或分享时,你是否感到困扰?别担心,本文将为你揭秘轻松解决视频太大发不了的问题。 电脑频编辑器可以用于简单的…

图书借阅小程序论文(设计)开题报告

一、课题的背景和意义 近些年来,随着移动互联网巅峰时期的来临,互联网产业逐渐趋于“小、轻、微”的方向发展,符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中,被誉为“运行着程序的网站”之名的微信小程序…

【大数据】—量化交易实战案例(海龟交易策略)

声明:股市有风险,投资需谨慎!本人没有系统学过金融知识,对股票有敬畏之心没有踏入其大门,今天用另外一种方法模拟炒股,后面的模拟的实战全部用同样的数据,最后比较哪种方法赚的钱多。 海龟交易…

LaTeX表格灵活设置列宽

一些基本的插入表格的操作见:https://blog.csdn.net/gsgbgxp/article/details/129457872 遇到问题先查阅《IShort》和刘海洋老师的《LaTeX入门》。 设置表格列宽基础操作(不借助tabularx) 先从一个简单表格开始 \begin{table}[!h]\centeri…

软件确认测试和系统测试包括哪些测试内容?有什么区别?

一、软件确认测试 软件确认测试,顾名思义,是为了确认软件的正确性和完整性而进行的测试过程。它旨在验证软件是否符合用户需求和软件开发规范。测试内容包括: 1、功能确认:通过对软件各项功能进行测试,验证其是否按照…

c语言----队列

很久没有写文章了。因为放假了嘛,给自己稍微放松了一下,所以最近的更新很慢。呜呜下一次一定改。然后咧。今天我想与大家分享的是队列。虽然这个知识点我们应该在讲了堆的实现就应该写的,但是后面忘了,以为自己是写了的。但是昨天…

sql查询练习

1.表的结构 课程表:课程编号cid,课程名称canme,老师tid, 教师表:教师tid,教师姓名tname 分数表:学生student_sid,课程 cours_id,,分数score 学生表&#xff…

DC/AC电源模块为现代电子设备提供稳定的能源

BOSHIDA DC/AC电源模块为现代电子设备提供稳定的能源 DC/AC电源模块是一种重要的电子设备,它为现代电子设备提供稳定的能源。在今天的高科技社会中,电子设备已经成为人们生活和工作的重要组成部分。从家用电器到计算机、手机、汽车和航天航空设备&…

基于antv x6实现的组织架构图

X6 是基于 HTML 和 SVG 的图编辑引擎,基于 MVC 架构,用户更加专注于数据逻辑和业务逻辑。 一、业务背景 将组织树形结构图形化,更直观的展示个人所在的组织架构。 二、功能点 组织结构按需渲染,支持层级展开、收缩按需求自定义…

【软件测试】之黑盒测试用例的设计

🏀🏀🏀来都来了,不妨点个关注! 🎧🎧🎧博客主页:欢迎各位大佬! 文章目录 1.测试用例的概念2.测试用例的好处3. 黑盒测试用例的设计3.1 黑盒测试的概念3.2 基于需求进行测…

AI绘画Stable Diffusion画全身图总是人脸扭曲?ADetailer插件实现一键解决!

大家好,我是向阳 你是否遇到过SD生成的人物脸部扭曲、甚至令人恶心的情况?也曾感到束手无策?别担心,这份教程专为你而来。 在使用SD生成人物全身照时,你可能经常发现人物的脸部会出现扭曲问题。这是因为人物面部像素…

【前端】IntersectionObserver 实现图片懒加载和无限滚动

【前端】IntersectionObserver 实现图片懒加载和无限滚动 在前端开发中,性能优化是一个重要的考量因素。随着现代网页和应用的复杂性增加,确保页面快速加载和流畅运行变得越来越重要。本文将介绍一种强大的工具——IntersectionObserver API&#xff0c…

LabVIEW新能源汽车电池性能测试系统

新能源汽车的核心部件之一是电池,其性能直接关系到整车的续航里程、安全性和寿命。为了确保电池的性能和可靠性,测试是必不可少的环节。本文介绍了一种基于LabVIEW的新能源汽车电池性能测试系统,通过LabVIEW与数据采集设备的无缝集成&#xf…

Unity 实现UGUI 简单拖拽吸附

获取鼠标当前点击的UI if(RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition)) {return rectTransform.gameObject; } 拖拽 在Update 中根据鼠标位置实时更新拖拽的图片位置。 itemDrag.transform.position Input.mousePosition; …

秒拿AI模型API Key!Chat2DB AI模型切换实用秘籍

智谱AI(ZhiPu AI) 智谱 AI 是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。 1.申请调用权限 智谱AI开放平台网址:https://open.bigmodel.cn/ 点击开始使用,进行登录/注册。 智谱A…

The Sandbox 创作者的幕后采访: 了解创作者的内心世界

我们采访了一些在 "创作者挑战" 中脱颖而出的顶尖创作者,探讨他们成功的秘诀以及在创造玩家喜爱的体验方面的心得。 The Sandbox 创作者挑战涌现出许多才华横溢的创作者,他们在游戏制作机制上的创新和突破引起了 The Sandbox 社区的广泛关注。…

大白菜U盘启动工具

大白菜如何u盘启动进winpe装系统大白菜是一款非常实用的U盘启动盘制作工具,可以帮助用户快速地将U盘制作成启动盘,从而方便地进行系统安装、维护和修复等操作。官方网站: 大白菜u盘启动盘制作工具_大白菜u盘装系统_大白菜pe_大白菜官网-首页…