关于“Python”的核心知识点整理大全28

目录

11.1.5 添加新测试

11.2 测试类

11.2.1 各种断言方法

 unittestModule中的断言方法:

​编辑11.2.2 一个要测试的类

survey.py

language_survey.py

11.2.3 测试 AnonymousSurvey 类

test_survey.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


11.1.5 添加新测试

确定get_formatted_name()又能正确地处理简单的姓名后,我们再编写一个测试,用于测试 包含中间名的姓名。为此,我们在NamesTestCase类中再添加一个方法:

import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):"""测试name_function.py """def test_first_last_name(self):"""能够正确地处理像Janis Joplin这样的姓名吗?"""formatted_name = get_formatted_name('janis', 'joplin')self.assertEqual(formatted_name, 'Janis Joplin')def test_first_last_middle_name(self):"""能够正确地处理像Wolfgang Amadeus Mozart这样的姓名吗?"""
1 formatted_name = get_formatted_name('wolfgang', 'mozart', 'amadeus')self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')
unittest.main()

我们将这个方法命名为test_first_last_middle_name()。方法名必须以test_打头,这样它才 会在我们运行test_name_function.py时自动运行。这个方法名清楚地指出了它测试的是get_ formatted_name()的哪个行为,这样,如果该测试未通过,我们就会马上知道受影响的是哪种类 型的姓名。在TestCase类中使用很长的方法名是可以的;这些方法的名称必须是描述性的,这才 能让你明白测试未通过时的输出;这些方法由Python自动调用,你根本不用编写调用它们的代码。

为测试函数get_formatted_name(),我们使用名、姓和中间名调用它(见1),再使用 assertEqual()检查返回的姓名是否与预期的姓名(名、中间名和姓)一致。我们再次运行 test_name_function.py时,两个测试都通过了:

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK

太好了!现在我们知道,这个函数又能正确地处理像Janis Joplin这样的姓名了,我们还深信 它也能够正确地处理像Wolfgang Amadeus Mozart这样的姓名。

11.2 测试类

在本章前半部分,你编写了针对单个函数的测试,下面来编写针对类的测试。很多程序中都 会用到类,因此能够证明你的类能够正确地工作会大有裨益。如果针对类的测试通过了,你就能 确信对类所做的改进没有意外地破坏其原有的行为。

11.2.1 各种断言方法

Python在unittest.TestCase类中提供了很多断言方法。前面说过,断言方法检查你认为应 该满足的条件是否确实满足。如果该条件确实满足,你对程序行为的假设就得到了确认,你就可 以确信其中没有错误。如果你认为应该满足的条件实际上并不满足,Python将引发异常。 表11-1描述了6个常用的断言方法。使用这些方法可核实返回的值等于或不等于预期的值、 返回的值为True或False、返回的值在列表中或不在列表中。你只能在继承unittest.TestCase的 类中使用这些方法,下面来看看如何在测试类时使用其中的一个。

 unittestModule中的断言方法:

11.2.2 一个要测试的类

类的测试与函数的测试相似——你所做的大部分工作都是测试类中方法的行为,但存在一些 不同之处,下面来编写一个类进行测试。来看一个帮助管理匿名调查的类:

survey.py
class AnonymousSurvey():"""收集匿名调查问卷的答案"""
1 def __init__(self, question):"""存储一个问题,并为存储答案做准备"""self.question = questionself.responses = []
2 def show_question(self):"""显示调查问卷"""print(question)
3 def store_response(self, new_response):"""存储单份调查答卷"""self.responses.append(new_response)
4 def show_results(self):"""显示收集到的所有答卷"""print("Survey results:")for response in responses:print('- ' + response)

这个类首先存储了一个你指定的调查问题(见1),并创建了一个空列表,用于存储答案。 这个类包含打印调查问题的方法(见2)、在答案列表中添加新答案的方法(见3)以及将存储 在列表中的答案都打印出来的方法(见4)。要创建这个类的实例,只需提供一个问题即可。有 了表示调查的实例后,就可使用show_question()来显示其中的问题,可使用store_response()来 存储答案,并使用show_results()来显示调查结果。 为证明AnonymousSurvey类能够正确地工作,我们来编写一个使用它的程序:

language_survey.py
from survey import AnonymousSurvey
#定义一个问题,并创建一个表示调查的AnonymousSurvey对象
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
#显示问题并存储答案
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:response = input("Language: ")if response == 'q': 
breakmy_survey.store_response(response)
# 显示调查结果
print("\nThank you to everyone who participated in the survey!")
my_survey.show_results() 

这个程序定义了一个问题("What language did you first learn to speak? "),并使用这个 问题创建了一个AnonymousSurvey对象。接下来,这个程序调用show_question()来显示问题,并 提示用户输入答案。收到每个答案的同时将其存储起来。用户输入所有答案(输入q要求退出) 后,调用show_results()来打印调查结果:

What language did you first learn to speak?
Enter 'q' at any time to quit.
Language: English
Language: Spanish
Language: English
Language: Mandarin
Language: q
Thank you to everyone who participated in the survey!
Survey results:
- English
- Spanish
- English
- Mandarin 

AnonymousSurvey类可用于进行简单的匿名调查。假设我们将它放在了模块survey中,并想进 行改进:让每位用户都可输入多个答案;编写一个方法,它只列出不同的答案,并指出每个答案 出现了多少次;再编写一个类,用于管理非匿名调查。 进行上述修改存在风险,可能会影响AnonymousSurvey类的当前行为。例如,允许每位用户输 入多个答案时,可能不小心修改了处理单个答案的方式。要确认在开发这个模块时没有破坏既有 行为,可以编写针对这个类的测试。

11.2.3 测试 AnonymousSurvey 类

下面来编写一个测试,对AnonymousSurvey类的行为的一个方面进行验证:如果用户面对调查 问题时只提供了一个答案,这个答案也能被妥善地存储。为此,我们将在这个答案被存储后,使 用方法assertIn()来核实它包含在答案列表中:

test_survey.py
import unittest
from survey import AnonymousSurvey
1 class TestAnonmyousSurvey(unittest.TestCase):"""针对AnonymousSurvey类的测试"""
2 def test_store_single_response(self):"""测试单个答案会被妥善地存储"""question = "What language did you first learn to speak?"
3 my_survey = AnonymousSurvey(question)my_survey.store_response('English')
4 self.assertIn('English', my_survey.responses)
unittest.main()

我们首先导入了模块unittest以及要测试的类AnonymousSurvey。我们将测试用例命名为 TestAnonymousSurvey,它也继承了unittest.TestCase(见1)。第一个测试方法验证调查问题的 单个答案被存储后,会包含在调查结果列表中。对于这个方法,一个不错的描述性名称是 test_store_single_response()(见2)。如果这个测试未通过,我们就能通过输出中的方法名得 知,在存储单个调查答案方面存在问题。

要测试类的行为,需要创建其实例。在3处,我们使用问题"What language did you first learn to speak?"创建了一个名为my_survey的实例,然后使用方法store_response()存储了单个答案 English。接下来,我们检查English是否包含在列表my_survey.responses中,以核实这个答案是 否被妥善地存储了(见4)。 当我们运行test_survey.py时,测试通过了:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK

这很好,但只能收集一个答案的调查用途不大。下面来核实用户提供三个答案时,它们也将 被妥善地存储。为此,我们在TestAnonymousSurvey中再添加一个方法:

import unittest
from survey import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):"""针对AnonymousSurvey类的测试"""def test_store_single_response(self):"""测试单个答案会被妥善地存储"""--snip--def test_store_three_responses(self):"""测试三个答案会被妥善地存储"""question = "What language did you first learn to speak?"my_survey = AnonymousSurvey(question)
1 responses = ['English', 'Spanish', 'Mandarin']for response in responses: my_survey.store_response(response)
2 for response in responses:self.assertIn(response, my_survey.responses)
unittest.main()

我们将这个方法命名为test_store_three_responses(),并像test_store_single_response() 一样,在其中创建一个调查对象。我们定义了一个包含三个不同答案的列表(见1),再对其中 每个答案都调用store_response()。存储这些答案后,我们使用一个循环来确认每个答案都包含 在my_survey.responses中(见2)。

我们再次运行test_survey.py时,两个测试(针对单个答案的测试和针对三个答案的测试)都 通过了:

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK

前述做法的效果很好,但这些测试有些重复的地方。下面使用unittest的另一项功能来提高 它们的效率。

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

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

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

相关文章

2024免费mac苹果电脑系统电脑管家CleanMyMac X

macOS已经成为最受欢迎的桌面操作系统之一,它提供了直观、简洁的用户界面,使用户可以轻松使用和管理系统。macOS拥有丰富的应用程序生态系统;还可以与其他苹果产品和服务紧密协作,如iPhone、iPad,用户可以通过iCloud同…

Flutter ios 使用ListView 。滚动时 AppBar 改变颜色问题

在Ios 中 列表滚动条向下滚动一段距离后 会导致 AppBar 颜色改变 可以给 AppBar 或者 AppBarTheme。 scrolledUnderElevation: 0.0 属性 全局: MaterialApp(theme: ThemeData(appBarTheme: AppBarTheme(scrolledUnderElevation: 0.0)) ) 局部: App…

实现基于 Keepalived 和 Nginx 的高可用架构

目录 前言1 高可用性简介2 准备服务器和软件3 高可用的配置(主从配置)3.1 配置/etc/keepalived/keepalived.conf文件3.2 配置/usr/local/src/nginx_check.sh脚本文件 4 启动软件5 测试结语 前言 在现代互联网架构中,高可用性是至关重要的。N…

Linux——权限

个人主页:日刷百题 系列专栏:〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 一、 Linux下用户的分类 Linux下有两种用户: 1. root(超级管理员用户…

饥荒Mod 开发(十三):木牌传送

饥荒Mod 开发(十二):一键制作 饥荒Mod 开发(十四):制作屏幕弹窗 一键传送源码 饥荒的地图很大,跑地图太耗费时间和饥饿值,如果大部分时间都在跑图真的是很无聊,所以需要有一个能够传送的功能,不仅可以快速…

JOSEF约瑟三相电流继电器 HJL-93/AY AC220V 0.2-6A 导轨安装

HJL-93B数字式交流三相电流继电器 系列型号 HJL-93/AY数字式交流三相电流继电器;HJL-93/A数字式交流三相电流继电器; HJL-93/BY数字式交流三相电流继电器;HJL-93/B数字式交流三相电流继电器; HJL-F93/AY数字式交流三相电流继电…

ARM KEIL 安装

根据设备类型安装开发工具及环境 Arm,Cortex ----> MDK-Arm 8051 ----> C51 80251 ----> C251 C166,XC166,XC2000 MCU设备 ----> C155 填写信息提交后下载 点击MDK539.EXE下载 : MDK539.EXE 双击MDK539安装 点击Next 默认安装路径,点击Ne…

Linux系统管理、服务器设置、安全、云数据中心

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 我们来快速了解liunx命令 文章目录 前言解析命令提示符linux的文件和目录文件和目录管理文件操作 进程管理命令系统管理网络管理 书籍推荐 本文以服务器最常用的CentOS为例 解析命令提示…

星融元中标华夏银行项目,助力金融数据中心可视网建设工作

近日,星融元成功入围华夏银行国产品牌网络流量汇聚分流器(TAP)设备供应商,在助力头部金融机构构建数据中心可视网络的建设工作中,星融元又一次获得全国性股份制银行客户的青睐。 华夏银行作为全国性股份制商业银行积极…

前端开发中的webpack打包工具

前端技术发展迅猛,各种可以提高开发效率的新思想和框架层出不穷,但是它们都有一个共同点,即源代码无法直接运行,必须通过转换后才可以正常运行。webpack是目前主流的打包模块化JavaScript的工具之一。 本章主要涉及的知识点有&am…

UDP特性之组播(多播)

UDP特性之组播 1. 组播的特点2. 设置主播属性2.1 发送端2.2 接收端 3. 组播通信流程3.1 发送端3.2 接收端 4. 通信代码 原文链接 在公司测试广播和多播有一点问题。。。 1. 组播的特点 组播也可以称之为多播这也是UDP的特性之一。组播是主机间一对多的通讯模式,是…

Linux之FTP 服务器

一、FTP服务器匿名账户服务器配置 1、测试是否已安装vsftp服务器: 2、启动vsftp服务器: 3、修改vsftp主配置文件,允许匿名登录 4、重新启动vsftpd服务,禁用防火墙 5、打开FTP服务的数据文件存放目录/var/ftp,复制若干文件到该目…

端口占用命令 netstat (centos)+netstat (windows)

linux 1.使用 netstat 命令查看端口占用情况 netstat -tlnp 使用 -p 选项查看进程信息。 使用 -t 选项列出 TCP 协议的连接:类似(使用 -u 选项列出 UDP 协议的连接:) 2.查找占用指定端口号的应用信息 netstat -tlnp | grep 3…

C#拼接JSON

一、业务背景 最近项目需要与U8c对接,实现增删改查,借此机会,梳理一下C#解析Json字符串的问题。 这篇文章,先以新增接口为例。 二、新增接口 查看需要传入的json格式。 拼接json,无非就是{}和[]的来回嵌套。 首先&am…

「数据结构」二叉树1

🎇个人主页:Ice_Sugar_7 🎇所属专栏:C启航 🎇欢迎点赞收藏加关注哦! 文章目录 🍉树🍉二叉树🍌特殊二叉树🍌二叉树的性质🍌存储结构 🍉…

Multimodal Chain-of-Thought Reasoning in Language Models语言模型中的多模态思维链推理

Abstract 大型语言模型 (LLM) 通过利用思维链 (CoT) 提示生成中间推理链作为推断答案的基本原理,在复杂推理方面表现出了令人印象深刻的性能。然而,现有的 CoT 研究主要集中在语言情态上。我们提出了 Multimodal-CoT,它将语言(文本…

基于Arduino的智能太阳能追光系统(论文+源码)

1. 系统设计 本次的设基于Arduino的智能太阳能追光系统的设计,整体结构如图2.1所示。整个系统包括Arduino开发板,按键模块,太阳能板,X轴电机,Y轴电机,电池充电模块,电源模块,四路光照检测模块等…

网神防火墙后台用户敏感信息泄露漏洞复现

简介 网神防火墙是一款由中国知名网络安全公司启明星辰开发的防火墙产品。它提供了全面的网络安全防护功能,旨在保护企业网络免受各种网络威胁和攻击。 该产品存在用户账号信息泄露漏洞,通过构造特定数据包,获取防火墙管理员登录的账号密码。 漏洞复现 FOFA语法: body=&…

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

springcloud:对象存储组件MinIO

类似于FastDFS/HDFS的一个文件存储服务! SpringBoot整合MinIO实现分布式文件服务! #MinIO简介? Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的…