第13章:Python TDD完善货币加法运算(二)

写在前面


这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许优质的单元测试是一个切入点。 就我个人而言,这本书确实很有帮助。第一次读的时候,很多细节我都不太懂,但将书中内容应用到工作中后,我受益匪浅。比如面对一些让人抓狂的代码设计时,书里的方法能让我逐步深入理解代码的逻辑与设计。 作为一名测试开发工程师,我想把学习这本书的经验分享给大家,希望能给大家带来帮助。因为现在工作中大多使用 Python 代码,所以我把书中JAVA案例都用 Python 代码进行了改写 。

问题背景说明

在现实世界中,货币交易往往涉及不同币种之间的运算。仅实现同币种的加法运算无法满足实际需求。因此,需要引入“银行”对象来处理汇率转换问题,完善货币加法运算功能,使其能够正确处理不同币种的相加操作,增强货币类的实用性和功能性。

考虑到实际情况,货币加法可能涉及不同币种,这需要我们进一步优化代码,在Python TDD流程中不断完善功能。

13.1 思路说明

引入“银行”(Bank)对象来处理汇率转换问题。将货币的总和视为一个表达式,每种货币是表达式的原子形态。通过Bank类的方法来根据汇率将不同币种的货币转换后再进行加法运算。

13.2 测试代码

import unittestclass Bank:def reduce(self, source, to):return Money.dollar(10)  # 暂时的哑实现class Money:def __init__(self, amount, currency):self.amount = amountself.currency = currencydef plus(self, addend):return Money(self.amount + addend.amount, self.currency)def reduce(self, bank, to):return bank.reduce(self, to)class Dollar(Money):def __init__(self, amount):super().__init__(amount, "USD")class TestMoneyAddition(unittest.TestCase):def test_simple_addition(self):five_dollars1 = Dollar(5)five_dollars2 = Dollar(5)bank = Bank()result = five_dollars1.plus(five_dollars2).reduce(bank, "USD")self.assertEqual(result.amount, 10)self.assertEqual(result.currency, "USD")if __name__ == '__main__':unittest.main()

13.3 源码说明

新增Bank类,目前reduce方法是哑实现,仅返回一个固定的Money对象。Money类中新增reduce方法,用于将货币对象通过Bank类进行转换。在测试用例中,对相加后的货币对象调用reduce方法,并验证结果。虽然当前Bank类功能不完善,但为后续实现多币种加法奠定了基础。

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

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

相关文章

.Net Core微服务入门全纪录(六)——EventBus-事件总线

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

C#防止重复提交

C#防止重复提交 文章目录 C#防止重复提交前言防止重复提交的思路Web API 防止重复提交代码实现代码讲解使用方法 MVC防止重复提交总结 前言 当用户在前端进行提交数据时,如果网络出现卡顿和前端没有给出响应的话顾客通常都会狂点提交按钮,这样就很容易导…

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,还学习了一种自适应处理方法,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学o…

嵌入式硬件篇---PID控制

文章目录 前言第一部分:连续PID1.比例(Proportional,P)控制2.积分(Integral,I)控制3.微分(Derivative,D)控制4.PID的工作原理5..实质6.分析7.各种PID控制器P控…

日志收集Day001

1.ElasticSearch 作用:日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml(这里yy做了别名,过滤掉空行和注释行) yy /etc/el…

集合帖:前缀和及差分模板题 ← 一维及二维

【一维前缀和及一维差分知识点】 ● 一维“前缀和数组”预处理过程:cin>>a[i], sum[i]sum[i-1]a[i] 或者 cin>>sum[i], sum[i]sum[i-1] (1≤i≤n) ● 一维“区间和”计算过程:sum[y]-sum[x-1] (y…

《offer 来了:Java 面试核心知识点精讲 -- 框架篇》(附资源)

继上篇文章介绍了《offer 来了:Java 面试核心知识点精讲 -- 原理篇》书后,本文章再给大家推荐兄弟篇 《offer来了:Java面试核心知识点精讲--框架篇》, 简直就是为Java开发者量身定制的面试神器。 本书是对Java程序员面试中常见的…

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…

Video-RAG:一种将视频RAG新框架

1. 摘要及主要贡献点 摘要: 检索增强生成(RAG)是一种强大的策略,通过检索与查询相关的外部知识并将其整合到生成过程中,以解决基础模型生成事实性错误输出的问题。然而,现有的RAG方法主要集中于文本信息&…

Docker Load后存储的镜像及更改镜像存储目录的方法

Docker Load后存储的镜像及更改镜像存储目录的方法 Docker Load后存储的镜像更改镜像存储目录的方法脚本说明注意事项Docker作为一种开源的应用容器引擎,已经广泛应用于软件开发、测试和生产环境中。通过Docker,开发者可以将应用打包成镜像,轻松地进行分发和运行。而在某些场…

【零基础入门unity游戏开发——unity通用篇37】鼠标指针(光标)修改隐藏锁定(基于unity6开发介绍)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

亲测解决Latex File ended while scanning use of \@@BOOKMARK

这个问题只要删除了.tex后缀文件外的其他同名文件,再次编译即可。 环境 Win11 MikTex 问题原因 编译的时候用了好几种编译器,然后编译出现了错误。生成了不能使用的引用。 解决方法 删除.tex后缀文件外的其他同名文件后,再次编译。 笔…

Amazon MSK 开启 Public 访问 SASL 配置的方法

1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面,点击左侧菜单 Cluster configuration。选择已有配置,或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置,选择到新添加的配置。 1.2 开启 Pu…

Windows FileZila Server共享电脑文件夹 映射21端口外网连接

我有这样一个使用场景,在外部网络环境下,通过手机便捷地读取存储在电脑上的视频文件。比如在外出旅行、出差,身边没有携带电脑,仅依靠手机设备,就能随时获取电脑里存储的各类视频,无论是学习资料视频、工作…

MySQL 实战 4 种将数据同步到ES方案

文章目录 1. 前言2. 数据同步方案 2.1 同步双写2.2 异步双写2.3 定时更新2.4 基于 Binlog 实时同步 3. 数据迁移工具选型 3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal对比3.4 其它 4. 后记 上周听到公司新同事分享 MySQL 同步数据到 ES 的方案,发现很有…

虚幻基础-1:cpu挑选(14600kf)

能帮到你的话,就给个赞吧 😘 文章目录 ue非常吃cpu拉满主频打开项目编写蓝图运行原因 时间长 关于压力测试 本文以14600kf为例,双12购入,7月份产。 ue非常吃cpu 经本人测试,ue是非常吃cpu的。 拉满主频 无论任何时间…

QTableWidget的简单使用

1.最简单的表格示例&#xff1a; ui->tableWidget->setRowCount(2);// 设置行数ui->tableWidget->setColumnCount(3);// 设置列数&#xff0c;一定要放在设置行表头之前QStringList rowHeaderList;// 行表头rowHeaderList << QStringLiteral("姓名"…

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录 一、Graylog简介二、Graylog原理架构三、日志系统对比四、Graylog部署传统部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置详情六、优化网络和 REST APIMongoDB 七、升级八、监控九、常见问题及处理 一、Graylog简介 Graylog是一个简单易用、功能较全面的…

2024年我的技术成长之路

2024年我的技术成长之路 大家好&#xff0c;我是小寒。又到年底了&#xff0c;一年过得真快啊&#xff01;趁着这次活动的机会&#xff0c;和大家聊聊我这一年在技术上的收获和踩过的坑。 说实话&#xff0c;今年工作特别忙&#xff0c;写博客的时间比去年少了不少。不过还是…

嵌入式硬件篇---基本组合逻辑电路

文章目录 前言基本逻辑门电路1.与门&#xff08;AND Gate&#xff09;2.或门&#xff08;OR Gate&#xff09;3.非门&#xff08;NOT Gate&#xff09;4.与非门&#xff08;NAND Gate&#xff09;5.或非门&#xff08;NOR Gate&#xff09;6.异或门&#xff08;XOR Gate&#x…