Python编程从入门到实践 第十一章:测试代码 练习答案记录

news2025/1/6 18:56:09

Python编程从入门到实践 第十一章:测试代码 练习答案记录

练习题导航

  • Python编程从入门到实践 第十一章:测试代码 练习答案记录
  • 11.1 测试函数
    • 11.1.1 单元测试和测试用例
    • 11.1.2 可通过的测试
    • 11.1.3 未通过的测试
    • 11.1.4 测试未通过时怎么办
    • 11.1.5 添加新测试
      • 练习11-1 城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名。这个函数返回一个格式为City, Country的字符串,如Santiago, Chile。将这个函数存储在一个名为city_functions.py的模块中。
      • 练习11-2 人口数量:修改前面的函数,使其包含第三个必不可少的形参population,并返回一个格式为City, Country - population xxx的字符串,如Santiago, Chile - population 5000000。运行test_cities.py,确认测试test_city_country()未通过。
  • 11.2 测试类
    • 11.2.1 各种断言方法
    • 11.2.2 一个要测试的类
    • 11.2.3 测试AnonymousSurvey类
    • 11.2.4 方法setUp()
      • 练习11-3 雇员:编写一个名为Employee的类,其方法__init__()接受名、姓和年薪,并将它们都存储在属性中。
  • 11.3 小结

11.1 测试函数

11.1.1 单元测试和测试用例

11.1.2 可通过的测试

11.1.3 未通过的测试

11.1.4 测试未通过时怎么办

11.1.5 添加新测试

练习11-1 城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名。这个函数返回一个格式为City, Country的字符串,如Santiago, Chile。将这个函数存储在一个名为city_functions.py的模块中。

创建一个名为test_cities.py的程序,对刚编写的函数进行测试(别忘了,你需要导入模块unittest以及要测试的函数)。
编写一个名为test_city_country()的方法,核实使用类似于’santiago’和’chile’这样的值来调用前述函数时,得到的字符串是正确的。
运行test_cities.py,确认测试test_city_country()通过了。

主程序

import unittest
from city_functions import city_functions

class NamesTestCase(unittest.TestCase):
    """测试city_functions.py"""

    def test_first_last_name(self):
        formatted_name=city_functions('santiago','chile')
        self.assertEqual(formatted_name,'santiago,chile')

if __name__ == '__main__':
    unittest.main()

导入

def city_functions(City, Country):
    return f"{City},{Country}"

测试通过

在这里插入图片描述

练习11-2 人口数量:修改前面的函数,使其包含第三个必不可少的形参population,并返回一个格式为City, Country - population xxx的字符串,如Santiago, Chile - population 5000000。运行test_cities.py,确认测试test_city_country()未通过。

修改上述函数,将形参population设置为可选的。再次运行test_cities.py,确认测试test_city_country()又通过了。
再编写一个名为test_city_country_population()的测试,核实可以使用类似于’santiago’、'chile’和’population=5000000’这样的值来调用这个函数。
再次运行test_cities.py,确认测试test_city_country_population()通过了。

修改后的函数

def city_functions(City, Country,population=0):
    return f"{City},{Country}-population {population}"

主函数不变,测试不通过

import unittest
from city_functions import city_functions

class NamesTestCase(unittest.TestCase):
    """测试city_functions.py"""

    def test_first_last_name(self):
        formatted_name=city_functions('santiago','chile')
        self.assertEqual(formatted_name,'santiago,chile')

if __name__ == '__main__':
    unittest.main()

在这里插入图片描述

主函数修改后,测试通过

import unittest
from city_functions import city_functions

class NamesTestCase(unittest.TestCase):
    """测试city_functions.py"""

    def test_first_last_name(self):
        formatted_name=city_functions('santiago','chile')
        self.assertEqual(formatted_name,'santiago,chile-population 0')

if __name__ == '__main__':
    unittest.main()

在这里插入图片描述

11.2 测试类

11.2.1 各种断言方法

11.2.2 一个要测试的类

11.2.3 测试AnonymousSurvey类

11.2.4 方法setUp()

练习11-3 雇员:编写一个名为Employee的类,其方法__init__()接受名、姓和年薪,并将它们都存储在属性中。

编写一个名为give_raise()的方法,它默认将年薪增加5000美元,但也能够接受其他的年薪增加量。
为Employee编写一个测试用例,其中包含两个测试方法:
test_give_default_raise()和test_give_custom_raise()。
使用方法setUp(),以免在每个测试方法中都创建新的雇员实例。运行这个测试用例,确认两个测试都通过了。

主程序

import unittest
from Employee import Employee

class TestEmployee(unittest.TestCase):

    def setUp(self):
        self.employee=Employee('liu','yi zheng',100_000)

    def test_give_default_raise(self):
        self.assertIn('liu',self.employee.first_name)

    def test_give_custom_raise(self):
        self.assertIn(str(100_000),str(self.employee.years_money))

if __name__ == '__main__':
    unittest.main()

函数

class Employee:

    def __init__(self,first_name,last_name,years_money):
        self.first_name=first_name
        self.last_name=last_name
        self.years_money=years_money

    def give_raise(self,money_rise=5000):
        self.years_money += money_rise

测试结果

在这里插入图片描述

11.3 小结

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

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

相关文章

Flutter/Dart 中的 extension 方法

Flutter Dart 中的 extension 方法 前言 我们将讨论 extension 方法如何对我们有用,以及为什么您的代码因为它们而变得更加精确和可读的原因。 简介 在本文中,我们将学习 Dart 中的 extension 方法。也许你想知道那是什么,它是如何工作的&…

HIve数仓新零售项目DWS层的构建(Full join)模型

HIve数仓新零售项目 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kaf…

全自动调节灯光强度的实现(仿真+程序+文档)

目 录 摘 要 I Abstract II 绪论 1 1.1 选题背景及意义 1 1.2 国内外研究现状 1 1.3 研究主要内容 3图书馆学习桌台灯智能控制系统简介与方案分析 4 2.1 大学图书馆照明控制现状 4 2.2 图书馆学习桌台灯智能控制系统简介 4 2.3 系统控制方案分析 4 2.4 本章小节 5系统硬件设计…

JavaScript练手小技巧:我破解了原神官网全屏滚动的秘密

这个标题有点夺人眼球,哈啊哈~骗点击率的。 “原神”官网当真的做的很漂亮,虽然我没玩过这个游戏,但是禁不住喜欢这个网站啊。 https://ys.mihoyo.com/ 最近居家教学上网课。除了上课,实在不想做学校安排的其它任务&#xff0c…

热量衡算习题课

第一部分 --- 传热计算综合例题 1.qm是质量流量,T1,2和 t1,2对应的是热流体和冷流体分别在管道进口和出口的温度 2.吊塔tm是传热温差 3.α1是热流体的对流传热系数,α2是冷流体的对流传热系数,K是整个对流传热过程的总的传热系…

【Linux】在Xilinx平台上实现UVC Gadget(2)- 解决dwc3驱动bug

【Linux】在Xilinx平台上实现UVC Gadget(2)- 解决dwc3驱动bug一、bug描述二、具体修改方法1. 找到内核源码位置并复制到其他目录2. Petalinux里面设置使用自定义内核源码1) 选第2个Linux Components Selection2) 选linux-kernel,回车&#xf…

【笔试题】【day22】

文章目录第一题(循环队列的元素个数)第二题(二叉排序树插入规则)第三题(线性探测的平均查找长度)第四题(关键字比较次数与初始序列无关的)第一题(循环队列的元素个数&…

m短波宽带通信系统的信道建模matlab仿真

目录 1.算法概述 1.1 Watterson信道模型理论简介 1.2 Nakagami信道模型 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 宽带短波信道的研究是设计宽带大容量短波通信的基础,但是传统的短波信道的研究仅限于窄带信号传输,这已经…

论文阅读-Whisper语音识别(OpenAI)

一、论文信息 论文名称:Robust Speech Recognition via Large-Scale Weak Supervision 代码地址:https://github.com/openai/whisper 官方博客:https://openai.com/blog/whisper 作者团队:OpenAI 二、介绍 Whisper是一个通用…

HAProxy实现负载均衡

目录 一、HAProxy介绍 二、环境准备 三、实验拓扑 四、HAProxy部署 五、配置HAProxy状态页面 一、HAProxy介绍 ha-proxy是一款高性能的负载均衡软件,主要是做7层负载均衡,也可以做4层负载均衡。因为其专注于负载均衡这一些事情,因此与ng…

8、如何使用FactoryBean向Spring容器中注册bean?

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

openEuler快速入门-openEuler命令行基础操作

系列文章目录 第一章 openEuler快速入门(一)-openEuler操作系统介绍 文章目录系列文章目录前言一、shell是什么二、Linux命令行操作技巧三、基础命令3.1、Linux命令分类3.2、目录和文件3.2.1 相对路径和绝对路径3.2.2 处理目录的常用命令ls:cd:pwd&…

tkinter绘制组件(36)——树状图

tkinter绘制组件(36)——树状图引言布局函数结构内容数据格式整体框架绘制元素与重绘宽度标识元素展开与闭合完整函数代码效果测试代码最终效果github项目pip下载结语引言 TinUI的第38个元素控件,也是TinUI-4.0-添加的第一个组件&#xff0c…

Rsync下行同步+inotify实时同步介绍和部署

一、Rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩&#xf…

2022世界杯结果预测,简单AI模型最有效?附代码!

2022世界杯冠军是谁?本文将为你揭晓一个利用简单AI模型得到的靠谱预测。 许多人称足球为“不可预测的比赛”,因为一场足球比赛有不同的因素可以改变最终比分。 这是真的……在某种程度上。 北大出版社,人工智能原理与实践 人工智能和数据科…

面试官:什么是伪共享,如何避免?

本文已收录到 GitHub AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 加入 Android 交流群。 前言 大家好,我是小彭。 在前面的文章里,我们聊到了 CPU 的高速缓存机制。…

【electron】判断当前进程是否是开发环境的五种方案(获取一些资源的路径)

文章目录导读需求开发环境判断是否是开发环境方案一:location.protocol方案二:全局变量__static方案三:全局变量process.resourcesPath方案四:全局变量process.env.WEBPACK_DEV_SERVER方案五:app.isPackaged获取配置目…

OS-process

process 什么是进程 进程是被加载到内存中、正在运行的程序;多个进程可能对于同一个程序、一个正在运行的OS中会有多个进程 进程是程序的一次执行过程,是操作系统分配资源的基本单位 作业等同于进程 进程的布局: 每个进程都有一个不同的…

内网渗透中最常见的十种漏洞分析总结

【环境搭建资料、工具包、全套视频…等籽料】私信聆取 以下信息是根据2020年和2019年为全球各种中型组织和企业完成的60多个渗透测试报告汇总而来的,在跳转到列表之前,让我们简要介绍一下全面的测试方法。 一、测试方法 目的是使用白盒(灰盒)方法在现场…

spirngboot项目.mvn/wrapper/maven-wrapper.properties‘ does not exist.

rm -rf ~ 命令后,项目出现一些问题,如下 执行命令: ./mvnw clean package -am -pl bistoury-dist -P$PROFILR -Dmaven.test.skip -Denforcer.skiptrue 报异常: starting to build bistoury agent Exception in thread "ma…