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

news2025/1/17 23:15:57

前言

本文是根据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.coloradmin.cn/o/1894991.html

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

相关文章

旅游系统(附管理端+前台)PHP源码

一. 前言 今天小编给大家带来了一款可学习,可商用的,旅游系统 源码,支持二开,无加密。支持景点管理,登录,景点预定,意见反馈,统计等功能。详细界面和功能见下面视频演示。 二. 视频…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_:将log消息…

android应用的持续构建CI(二)-- jenkins集成

一、背景 接着上一篇文章,本文我们将使用jenkins把所有的流程串起来。 略去了对android应用的加固流程,重点是jenkins的job该如何配置。 二、配置jenkins job 0、新建job 选择一个自由风格的软件项目 1、参数赋值 你可以增加许多参数,这…

免费的鼠标连点器哪个好用?5款2024年最新鼠标连点器分享

鼠标连点器是电脑网络游戏爱好者并不陌生的游戏辅助工具,他在FPS、RTS、moba等游戏种类中发挥着重要作用。可以帮助玩家的鼠标完成各种简单点击动作。轻松实现游戏刷机升级。让你游戏升级不再“肝”,轻松刷图升级,秒表大佬不是梦!…

中国东方资产管理25届秋招北森测评笔试如何高分通过?真题考点分析看完这篇就够了

一、东方资管校招测评题型分析 中国东方资产管理股份有限公司(中国东方资管)的校园招聘测评题型主要包括以下几个部分: 1. **计分题,行测知识**:这部分题量大约在56-57题左右,分为不同的模块进行计时测试。…

探索设计的未来:了解设计师对生成式人工智能(AIGC)工具的采用

在数字化浪潮的推动下,设计行业正经历着一场革命性的变革。随着生成式人工智能(AIGC)技术的发展,设计师们迎来了前所未有的机遇与挑战。这些工具不仅重塑了传统的设计流程,还为设计师们提供了更广阔的创意空间和更高效…

航模插头篇

一、常见的电池插头(电调端 是公头 电池端 是母头) 电池总是被插的 1.XT60头 过流大 安全系数高 难插拔 2.T插 插拔轻松 过流比较小 容易发烫 电调端 是公头 电池端 是母头 3.香蕉头插孔 过流够 插拔轻松 但 容易插反 爆炸 4.TX90(和XT60差…

如何快速选择短剧系统源码:高效构建您的在线短剧平台

在数字化时代,短剧作为一种新兴的娱乐形式,受到了广泛的欢迎。随着市场需求的增长,构建一个在线短剧平台成为了很多创业者和开发者的目标。而选择正确的短剧系统源码则是实现这一目标的关键步骤。本文将为您提供一些实用的指导,帮…

C++ 文达校内党员管理系统-计算机毕业设计源码20855

目 录 摘要 1 绪论 1.1研究背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 文达校内党员管理系统系统分析 2.1 可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系统流程分析 2.4.1 数据流程 2.5.2 业务流程 2.…

智能井盖采集装置 开启井下安全新篇章

在现代城市的脉络之下,错综复杂的管网系统如同城市的血管,默默支撑着日常生活的有序进行。而管网的监测设备大多都安装在井下,如何给设备供电一直是一个难题,选用市电供电需经过多方审批,选用电池供电需要更换电池包&a…

【深入理解Java虚拟机】判断垃圾-引用计数法及其缺陷

什么是引用计数法 引用计数法用来判断对象是否存活 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值加一;当引用失效时,计数器的值就减一,任何时刻计数器为0的对象是不可能在被使用的。(存…

项目进度管理(信息系统项目管理师)

定义活动的输出:活动清单、活动属性、里程碑清单定义活动的输入包括进度管理计划、范围基准、事业环境因素、组织过程资产定义活动的工具与技术包括专家判断、分解、滚动式规划、会议分解是一种把项目范围和项目可交付成果逐步划分为更小、更便于管理的组成部分的技…

基于单片机的出租车计价器实验教学案例设计

摘 要 为了让学生加深单片机的理解,加强学生的单片机技术应用、实践动手、创新能力的培养,根据单片机课程设计教学情况精心设计了基于单片机的出租车计价器实验教学案例。本教学案例的基本原理是速度的检测,里程、价格的计算和显示。学生通…

redis客户端基本操作命令

1 key结构 *1、模糊匹配 keys 值 2、删除 del key DEL key [key …]:删除一个或多个key,如果key本身不存在,则会忽略 3、查询 get “key” key加双引号 Redis的key允许有多个单词形成层级结构,多个单词之间使用:隔开。 例如&…

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

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

Python列表创建使用心得详解

概要 列表是Python中最常用的数据结构之一,它用于存储有序的元素集合。Python提供了多种方式来创建和操作列表,使得列表在数据处理、存储和操作中非常灵活。本文将详细介绍Python列表创建的各种技巧,包括基础创建方法、列表推导式、内置函数和高级创建技巧,并包含具体的示…

重塑绿色共享消费新纪元:共融增值模式

在当今时代浪潮中,绿色消费与共享经济已成为推动社会可持续发展的重要力量。为此,我们精心打造了“共享购”这一前沿消费增值生态体系,它不仅深度联结了商家资源,更通过独特的价值循环机制,促进了商家与消费者的共同繁…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥生成介绍及算法规格】

密钥生成介绍及算法规格 当业务需要使用HUKS生成随机密钥,并由HUKS进行安全保存时,可以调用HUKS的接口生成密钥。 注意: 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harm…

proverif报错Error: File error: test1.pv: No such file or directory.

当执行proverif时候出现如下报错时候 解决方案如下,使用命令 proverif …/test1.pv