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

news2024/11/13 11:00:51

目录

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 = question
 self.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': 
break
 my_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.coloradmin.cn/o/1322125.html

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

相关文章

【Java】【Hutool】从零开始实现发送邮件功能

采用Hutool工具实现发送邮件&#xff0c;可以访问Hutool官网 引言&#xff1a;从零开始&#xff0c;实现一个基本功能&#xff0c;邮件发送 第一步&#xff1a;打开idea&#xff0c;新建maven工程&#xff0c;引入依赖&#xff0c;如下&#xff1a; <dependencies><…

电力智能运维管理系统

电力智能运维管理系统是一种基于先进的信息技术、自动化技术和智能控制技术&#xff0c;针对电力行业的特殊需求而开发的一种全面综合性管理系统。 依托电易云-智慧电力物联网&#xff0c;该系统以实时监测、高效运维、远程控制的方式&#xff0c;将各类数据信息及时采集、处理…

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1&#xff09;安装 Maven-Helper 插件2&#xff09;Maven Helper 插件使用方法3&#xff09;Idea-Maven 可视化依赖树 1&#xff09;安装 Maven-Helper 插件 这里我们已经安装过了&#xff0c;如果没有安装过&#xff0c;点…

银行测试:第三方支付平台业务流,功能/性能/安全测试方法

1、第三方支付平台的功能和结构特点 在信用方面&#xff0c;第三方支付平台作为中介&#xff0c;在网上交易的商家和消费者之间作一个信用的中转&#xff0c;通过改造支付流程来约束双方的行为&#xff0c;从而在一定程度上缓解彼此对双方信用的猜疑&#xff0c;增加对网上购物…

【Mac】flutter项目集成高德定位SDK,获取key

一、获取调试版安全码SHA1 1.进入当前用户文件夹下的~/.android目录 cd ~/.android2.查看 debug.keystore ls3.运行 debug.keystore keytool -list -v -keystore debug.keystore这里报错&#xff1a; The operation couldn’t be completed. Unable to locate a Java Runt…

老照片翻新修复软件有哪些?带你了解这5个

老照片翻新修复软件有哪些&#xff1f;随着时间的流逝&#xff0c;许多珍贵的老照片可能因为各种原因而受损。幸运的是&#xff0c;现在有一些软件可以帮助我们恢复这些珍贵的回忆。下面是一些值得推荐的修复老照片的软件。 1.迅捷抠图 这是一款功能强大的电脑端软件&#xff…

v0.12.0-敏感词/脏词词标签能力进一步增强

拓展阅读 敏感词工具实现思路 DFA 算法讲解 敏感词库优化流程 java 如何实现开箱即用的敏感词控台服务&#xff1f; 各大平台连敏感词库都没有的吗&#xff1f; v0.10.0-脏词分类标签初步支持 v0.11.0-敏感词新特性&#xff1a;忽略无意义的字符&#xff0c;词标签字典 …

化工企业人员定位解决方案,人员定位系统源码

行业背景 1、人车位置不精准&#xff1a;无法实时查看内外部人员和车辆的精准位置&#xff0c;遇到突发安全事故&#xff0c;无法及时确认人员位置并制定有效的救援方案。 2、作业安全保障弱&#xff1a;难以管控人员和车辆非法进入重大危险源区域、高危装置区、特殊作业区、罐…

深入了解Linux信号:作用、产生、捕捉和阻塞

这里写目录标题 引言1. 信号的基本概念1.1 信号的分类和编号&#xff1a;1.2 查看信号默认处理动作1.3 信号的作用1.4 信号的产生1.4.1通过终端按键产生1.4.2通过系统函数向进程发信号1.4.3由软件条件产生信号1.4.4硬件异常产生信号 2. 常见信号及其作用SIGINT (2) - 中断信号&…

你对葡萄酒中的亚硫酸盐是不是有误解呢?

亚硫酸盐不会让某些人对酒产生不良的反应首先&#xff0c;让我谈谈欧洲生产的葡萄酒不含亚硫酸盐的观点&#xff0c;这在很大程度上是一种误解。虽然我听说过某些生产商在酿造葡萄酒时不添加亚硫酸盐&#xff0c;但这些确实是例外&#xff0c;添加亚硫酸盐是世界公认的酿酒传统…

如何通过MT-Bench评估大模型

如何评估LLM在开放性问题的回答能力 前面三篇博客中介绍了如何评估大模型&#xff0c;内容包括评估大模型时常用的指标&#xff0c;每个指标背后的含义&#xff0c;如何通过编写代码实现指标的收集。对于passk指标&#xff0c;还进行了专门的说明。在前面的博客中&#xff0c;我…

【PC端查看PDA扫描结果】

1、生成条形码 https://www.gaitubao.com/barcode 2、打开Android Studio 进行下图这样配置&#xff0c;那么就能看到pda扫描的数据了 Decoding result&#xff1a;

Jenkins插件安装失败时这么做就搞定啦!

1.网络或墙的问题导致插件下载安装失败 这种错误提示很明显&#xff0c;就是无法连接到插件下载地址&#xff0c;导致插件下载失败。 解决方法 为Jenkins更换源 点击Jenkins主页面左侧列表中【系统管理】—— 下拉找到【管理插件】 选择【高级】选项卡 替换最下方【升级站点…

PTFE四氟托盘应用于化工、医药、食品行业

PTFE托盘是一种广泛应用于化工、医药、食品等行业的特种托盘&#xff0c;采用聚四氟乙烯&#xff08;PTFE&#xff09;材料制造而成。PTFE是一种具有出色耐腐蚀性、高温稳定性和优异物理特性的材料。 PTFE托盘在化工领域中被广泛应用&#xff0c;主要用于处理腐蚀性的化学物质。…

【极客公园 IF 2024】李彦宏:AI-native时代,需要怎样的产品和开发者

文章目录 01 卷 AI 原生应用才有价值&#xff0c;大模型进展 对 多数人不是机会02 大公司代表落后生产力&#xff0c;千万不要看大公司在干嘛03 搜索本身也在进化&#xff0c;有机会变成全新的产品04 用生成式AI改造现有业务&#xff0c;可以创造更大价值05 创业公司能做出三五…

LeetCode刷题--- 全排列 II

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归递归、搜…

【微服务架构】——hystrix基础知识

文章目录 一、Hystrix是什么&#xff1f;二、为什么要使用Hystrix&#xff1f;三、在哪用&#xff1f;什么时候用&#xff1f;四、Hystrix是如何实现自动服务降级和服务熔断的呢&#xff1f; 一、Hystrix是什么&#xff1f; Hystrix是一个用于处理分布式系统的延迟和容错的开源…

智慧安防视频监控可视化平台EasyCVR调用接口返回“Unauthorized”是什么原因?

智慧安防视频监控可视化平台EasyCVR采用了开放式的网络结构&#xff0c;平台能在局域网、公网、专网等复杂的网络环境中&#xff0c;将场景中分散的海量网络监控设备进行统一接入与汇聚管理&#xff0c;并能提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云…

在 Windows PC 上轻松下载并安装 FFmpeg

FFmpeg 是一种开源媒体工具&#xff0c;可用于将任何视频格式转换为您需要的格式。该工具只是命令行&#xff0c;因此它没有图形、可点击的界面。如果您习惯使用常规图形 Windows 程序&#xff0c;安装 FFmpeg 一开始可能看起来很复杂&#xff0c;但不用担心&#xff0c;它;很简…

xhr请求是什么?

1、什么是xhr请求&#xff1f; xhr&#xff0c;全称为XMLHttpRequest&#xff0c;用于与服务器交互数据&#xff0c;是ajax功能实现所依赖的对象&#xff0c;jquery中的ajax就是对 xhr的封装。 XHR&#xff08;XMLHttpRequest&#xff09;请求是一种在浏览器中发送HTTP请求的…