第15章:Python TDD应对货币类开发变化(二)
写在前面
这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许优质的单元测试是一个切入点。 就我个人而言,这本书确实很有帮助。第一次读的时候,很多细节我都不太懂,但将书中内容应用到工作中后,我受益匪浅。比如面对一些让人抓狂的代码设计时,书里的方法能让我逐步深入理解代码的逻辑与设计。 作为一名测试开发工程师,我想把学习这本书的经验分享给大家,希望能给大家带来帮助。因为现在工作中大多使用 Python 代码,所以我把书中JAVA案例都用 Python 代码进行了改写 。
问题背景说明
在面对不同币种货币转换的需求时,之前的代码结构和实现方式可能无法满足。为了使代码能够正确实现货币转换功能,需要对代码进行重构和方法调整。这不仅可以解决当前的需求变化问题,还能优化代码结构,为后续可能的功能扩展奠定更好的基础。
为了使不同币种货币转换的测试用例通过,需要对代码进行重构和方法调整,这是Python TDD适应变化的重要体现。
15.1 思路说明
在Bank类中实现汇率存储和查询功能,在Money类的reduce方法中根据汇率进行货币转换。同时,调整相关类的结构和方法调用,确保代码逻辑的正确性。
15.2 测试代码
import unittestclass Bank:def __init__(self):self.rates = {}def addRate(self, from_currency, to_currency, rate):self.rates[(from_currency, to_currency)] = ratedef rate(self, from_currency, to_currency):if from_currency == to_currency:return 1return self.rates.get((from_currency, to_currency), 1)def reduce(self, source, to):if isinstance(source, Money):rate = self.rate(source.currency, to)return Money(source.amount / rate, to)class Money:def __init__(self, amount, currency):self.amount = amountself.currency = currencydef reduce(self, bank, to):return bank.reduce(self, to)class Dollar(Money):def __init__(self, amount):super().__init__(amount, "USD")class Franc(Money):def __init__(self, amount):super().__init__(amount, "CHF")class TestCurrencyConversion(unittest.TestCase):def test_reduce_money_different_currency(self):bank = Bank()bank.addRate("CHF", "USD", 2)franc = Franc(2)result = franc.reduce(bank, "USD")self.assertEqual(result.amount, 1)self.assertEqual(result.currency, "USD")if __name__ == '__main__':unittest.main()
15.3 源码说明
Bank类中新增rates字典用于存储汇率。addRate方法用于添加汇率,rate方法用于查询汇率,考虑了同币种汇率为1的情况。reduce方法根据汇率将Money对象转换为指定货币。Money类的reduce方法调用Bank类的reduce方法。测试用例验证了不同币种货币转换功能的正确性。
相关文章:
第15章:Python TDD应对货币类开发变化(二)
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
算法随笔_13: 有效三角形的个数
上一篇:算法随笔_12:最短无序子数组-CSDN博客 题目描述如下: 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 算法…...
WSL 2 自动更新 虚拟 IP 到 window hosts
window下的wsl2 开发中使用到 域名映射,但是WSL2 每次启动都会被分配一个虚拟的 ip 地址,每次启动虚拟ip 都不一样,导致要频繁 更改 window 的 hosts 文件,太麻烦了,所以写一个自动执行的 .sh 脚本,每次启动…...
我在广州学Mysql 系列——触发器的使用
ℹ️大家好,我是练小杰,这周是春节前的最后一周了,现在一双手数都能数得过来了!! 本播客将学习MYSQL中触发器的相关概念以及基础命令~~ 回顾:👉【MYSQL视图相关例题】 数据库专栏👉【…...
【useCallback Hook】在多次渲染中缓存组件中的函数,避免重复创建函数
文章目录 什么是 useCallback?基本语法 为什么需要 useCallback?示例1. 避免子组件重复创建函数2. 作为 useEffect 的依赖项 注意事项总结 在 React 开发中,性能优化是一个重要的主题。随着应用规模的增长,组件的重新渲染可能会变…...
2025/1/20 学习Vue的第三天
玩性太大了玩得也不开心,天天看电视刷视频。 内心实在空洞。 最近天天看小红书上的外国人,结实外国友人(狗头)哈哈哈认识了不少人,有埃及的有美国的,还有天天看菲利普吃糖葫芦哈哈哈哈哈一个阳光的德国大男…...
Kotlin Bytedeco OpenCV 图像图像49 仿射变换 图像裁剪
Kotlin Bytedeco OpenCV 图像图像49 仿射变换 图像裁剪 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…...
金融项目实战 07|Python实现接口自动化——连接数据库和数据清洗、测试报告、持续集成
目录 一、投资模块(投资接口投资业务) 二、连接数据库封装 和 清洗数据 1、连接数据库 2、数据清洗 4、调用 三、批量执行测试用例 并 生成测试报告 四、持续集成 1、代码上传gitee 2、Jenkin持续集成 一、投资模块(投资接口投资业务…...
(快速入门)保姆级详细的 Midjourney 基础教程
一、前言篇 1. 1. AI 绘图是什么? AI 绘画,顾名思义就是利用人工智能进行绘画,是人工智能生成内容(AIGC)的一个应用场景。其主要原理简单来说就是收集大量已有作品数据,通过算法对它们进行解析,最后再生成新作品,而算法也便是 AI 绘画的核心,是它得以爆火的基础…...
leetcode——找到字符串中所有字母异位词(java)
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "…...
大文件上传服务-后端V1V2
文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节,把之前做的项目拿过来总结一下,自己写的一个…...
Single-Model and Any-Modality for Video Object Tracking——2024——cvpr-阅读笔记
Single-Model and Any-Modality for Video Object Tracking 摘要相关工作创新处MethodShared embeddingModal promptingRGB Tracker based on TransformerOverall ExperiimentDatasetRGB-D samples are sourced from DepthTrackRGB-T samples are extracted from LasHeRRGB-E s…...
阳振坤:AI 大模型的基础是数据,AI越发达,数据库价值越大
2024年1月12日,第四届OceanBase数据库大赛决赛在北京圆满落幕。在大赛的颁奖典礼上,OceanBase 首席科学家阳振坤老师为同学们献上了一场主题为“爱上数据库”的公开课,他不仅分享了个人的成长历程,还阐述了对数据库行业现状与未来…...
Linux磁盘空间不足,12个详细的排查方法
在Linux系统运维过程中,磁盘空间不足是一个常见且棘手的问题。当磁盘空间被占满时,系统的正常运行会受到影响,甚至可能导致服务中断。因此,迅速有效地排查和解决磁盘空间问题显得尤为重要。本文将详细介绍16个排查Linux磁盘空间问…...
Spring Web MVC综合案例
承接上篇文章——Spring Web MVC探秘,在了解Spring Web MVC背后的工作机制之后,我们接下来通过三个实战项目,来进一步巩固一下前面的知识。 一、计算器 效果展示:访问路径:http://127.0.0.1:8080/calc.html 前端代码&a…...
微软预测 AI 2025,AI Agents 重塑工作形式
1月初,微软在官网发布了2025年6大AI预测,分别是:AI模型将变得更加强大和有用、AI Agents将彻底改变工作方式、AI伴侣将支持日常生活、AI资源的利用将更高效、测试与定制是开发AI的关键以及AI将加速科学研究突破。 值得一提的是,微…...
lvgl性能调优
LV_USE_PERFORMANCE lvgl_performance 是 LVGL 提供的性能分析工具,可以帮助开发者评估和优化图形库的性能。在一些特定的版本中,lvgl_performance 是一个宏或者工具,用来分析性能瓶颈,特别是图形渲染的效率。 下面是如何使用 l…...
CSS实现实现票据效果 mask与切图方式
一、“切图”的局限性 传统的“切图”简单暴力,但往往缺少适应性。 适应性一般有两种,一是尺寸自适应,二是颜色可以自定义。 举个例子,有这样一个优惠券样式 关于这类样式实现技巧,之前在这篇文章中有详细介绍: CSS 实现优惠券的技巧 不过这里略微不一样的地方是,两个…...
STL--list(双向链表)
目录 一、list 对象创建 1、默认构造函数 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷贝构造函数 二、list 赋值操作 1、赋值 2、assign(迭代器1,迭代器2) 3、assign(初始化列表) 4、assig…...
ZooKeeper 中的 ZAB 一致性协议与 Zookeeper 设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色)
参考Zookeeper 介绍——设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色) ZooKeeper 设计目的、特性、使用场景 ZooKeeper 的四个设计目标ZooKeeper 可以保证如下分布式一致性特性ZooKeeper 是一个典型的分布式数据一致…...
对称与负电源测试:动态直流电子负载的设计、原理与应用
1. 项目概述:对称与负电源的静态与动态直流负载在电子实验室里,测试一个电源的性能,尤其是它的动态响应能力,是件既基础又关键的事。我们常说的“直流电子负载”就是这个领域的核心工具。我之前设计并分享过一个用于正电源测试的静…...
METSO A413248自动化系统
METSO A413248 自动化系统模块产品特点: 品牌归属:芬兰METSO(美卓)工业自动化系统原装备件。 产品类型:工业级自动化控制模块/接口模块。 核心功能:用于控制信号处理、数据采集及系统集成。 系统兼容&am…...
孤舟笔记 互联网常用框架篇二 Dubbo服务请求失败怎么处理?集群容错策略你用过几种
文章目录先说结论Failover:换家店试试Failfast:不行就算了Failsafe:忘了这事Failback:回头再说Forking:同时点几家Broadcast:通知所有人怎么选择回答技巧与点评加分回答面试官点评个人网站分布式系统中&…...
Jupyter Notebook里跑argparse脚本总报错?一个空列表参数搞定ipykernel_launcher.py error
Jupyter Notebook中argparse报错的终极解决方案:空列表参数实战解析在数据科学和机器学习的工作流中,Jupyter Notebook因其交互式特性成为众多研究者的首选工具。然而,当我们尝试在Notebook中运行那些原本为命令行设计的Python脚本时…...
Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线
Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线 【免费下载链接】Style-Bert-VITS2 Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles. 项目地址: https://gitcode.com/gh_mirrors/st/Style-Bert-VITS2 Style-Bert…...
人工智能的伦理与安全:这3个问题,软件测试从业者必须重视
随着大语言模型、生成式AI的爆发式落地,人工智能已经从实验室走向千行百业的生产场景,深刻改变着软件开发与交付的逻辑。对于直接把控产品质量关口的软件测试从业者来说,我们的职责早已不再是单纯验证功能可用性、排查性能bug那么简单——AI系…...
LeagueAkari:基于LCU接口的英雄联盟客户端自动化工具深度解析
LeagueAkari:基于LCU接口的英雄联盟客户端自动化工具深度解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 功能模块架构与核心技…...
Awoo Installer:让Switch游戏安装变得简单高效的终极解决方案
Awoo Installer:让Switch游戏安装变得简单高效的终极解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 厌倦了繁琐的Switch游戏安…...
5分钟免费搞定HS2汉化:Honey Select 2完整中文补丁终极教程
5分钟免费搞定HS2汉化:Honey Select 2完整中文补丁终极教程 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而烦恼吗…...
如何用OpenHRMS打造企业级人力资源管理系统:30+模块完全指南
如何用OpenHRMS打造企业级人力资源管理系统:30模块完全指南 【免费下载链接】OpenHRMS 项目地址: https://gitcode.com/gh_mirrors/op/OpenHRMS 还在为繁琐的人力资源管理头疼吗?🤔 面对员工考勤、薪酬计算、绩效评估等复杂流程&…...
