第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方法。测试用例验证了不同币种货币转换功能的正确性。

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

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

相关文章

CSS 动画相关属性

定义和用法 一些 CSS 属性可用于动画制作,这意味着它们可用于过渡等效果中。 可设置动画的属性可以从一个值逐渐更改为另一个值,例如尺寸、数字、百分比和颜色。 浏览器支持 表格中的数字注明了完全支持 CSS 动画的首个浏览器版本。 -webkit-、-moz…

SD/MMC驱动开发

一、介绍 MMC的全称是”MultiMediaCard”――所以也通常被叫做”多媒体卡”,是一种小巧大容量的快闪存储卡,特别应用于移动电话和数字影像及其他移动终端中。MMC存贮卡只有7pin,可以支持MMC和SPI两种工作模式。 SD卡,数字安全记忆卡&#xf…

Elasticsearch:Jira 连接器教程第一部分

作者:来自 Elastic Gustavo Llermaly 将我们的 Jira 内容索引到 Elaasticsearch 中以创建统一的数据源并使用文档级别安全性进行搜索。 在本文中,我们将回顾 Elastic Jira 原生连接器的一个用例。我们将使用一个模拟项目,其中一家银行正在开发…

《探索烟雾目标检测开源项目:技术与应用的深度剖析》

一、引言 在现代社会,火灾犹如高悬的达摩克利斯之剑,时刻威胁着人们的生命财产安全。烟雾,作为火灾发生的重要征兆,其及时、准确的检测对于火灾预防和控制起着举足轻重的作用。烟雾目标检测技术犹如敏锐的 “电子哨兵”&#xff…

Linux操作系统的灵魂,深度解析MMU内存管理

在计算机的奇妙世界里,我们每天使用的操作系统看似流畅自如地运行着各类程序,背后实则有着一位默默耕耘的 “幕后英雄”—— 内存管理单元(MMU)。它虽不常被大众所熟知,却掌控着计算机内存的关键命脉,是保障…

3.2 OpenAI 语言模型总览:GPT 系列的演进与应用解析

OpenAI 语言模型总览:GPT 系列的演进与应用解析 OpenAI 的语言模型,特别是 GPT(Generative Pre-trained Transformer)系列,代表了当前自然语言处理(NLP)技术的前沿。自从推出以来,这些模型不断推进了文本生成、理解和交互的能力,成为了多个应用场景中的核心技术。本文…

【云岚到家】-day02-客户管理-认证授权

第二章 客户管理 1.认证模块 1.1 需求分析 1.基础概念 一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权 认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等 授权:则是该用…

Thinkphp8 Apidoc 实际使用中遇到的问题解决

1. 接口去掉 Controller 问题: 正确的路径应该是/api/login/register, 这块controller有没有地方配置的? 2. 自定义成功,错误消息有没有办法? 未完成, 待更新

2024春秋杯密码题第一、二天WP

你是小哈斯? 题目内容: 年轻黑客小符参加CTF大赛,他发现这个小哈斯文件的内容存在高度规律性,并且文件名中有隐藏信息,他成功找到了隐藏的信息,并破解了挑战。得意地说:“成功在于探索与质疑&#xff0c…

opencv对直方图的计算和绘制

【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、直方图的计算 cv::calcHist 是 OpenCV 中用于计算图像直方图的函数。它可以处理多通道图像,并通过指定图像、通道、掩膜、直方图大小和范围等参数来生成直方图。 函数原型 void cv::calcHist(…

C++的auto_ptr智能指针:从诞生到被弃用的历程

C作为一种功能强大的编程语言,为开发者提供了众多便捷的特性和工具,其中智能指针是其重要特性之一。智能指针能够自动管理内存,有效避免内存泄漏等常见问题。然而,并非所有智能指针都尽善尽美,auto_ptr便是其中的一个例…

游戏开发中常用的设计模式

目录 前言一、工厂模式二、单例模式三、观察者模式观察者模式的优势 四、状态模式状态模式的优势 五、策略模式策略模式的优势策略模式与状态模式有什么区别呢? 六、组合模式七、命令模式八、装饰器模式 前言 本文介绍了游戏开发中常用的设计模式,如工厂模式用于创…

C++并发编程之异常安全性增强

在并发编程中,异常安全是一个非常重要的方面,因为并发环境下的错误处理比单线程环境更加复杂。当多个线程同时执行时,异常不仅可能影响当前线程,还可能影响其他线程和整个程序的稳定性。以下是一些增强并发程序异常安全性的方法&a…

各语言镜像配置汇总

镜像配置汇总 Nodejs [ npm ]Python [ pip ] Nodejs [ npm ] // # 记录日期:2025-01-20// 查询当前使用的镜像 npm get registry// 设置淘宝镜像 npm config set registry https://registry.npmmirror.com/// 恢复为官方镜像 npm config set registry https://regi…

Navicat Premium 数据可视化

工作区,数据源以及图表 数据可视化是使用可视化组件(例如图表,图形和地图)的信息和数据的图形表示。 数据可视化工具提供了一种可访问的方式,用于查看和理解数据中的趋势,异常值和其他模式。 在Navicat中&…

linux通过web向mac远程传输字符串,mac收到后在终端中直接打印。

要通过Web从Linux向Mac远程传输字符串,并在Mac的终端中直接打印,可以使用以下方法。这里假设Linux作为服务器,Mac作为客户端。 方法 1:使用Python的HTTP服务器 在Linux上启动一个简单的HTTP服务器,Mac通过curl获取字符…

【系统分享01】Python+Vue电影推荐系统

大家好,作为一名老程序员,今天我将带你一起走进电影推荐系统的世界,分享如何利用 Django REST Framework 和 Vue 搭建一套完整的电影推荐系统,结合 协同过滤算法,根据用户评分与影片喜好,精准推送用户可能喜…

Spring Boot+Vue

Spring BootVue 前后端分离是一种非常流行且高效的开发模式,以下是关于其相关方面的详细介绍: 前端(Vue)部分 • 项目搭建 • 使用 Vue CLI 创建项目,它提供了丰富的插件和配置选项,能够快速生成项目基础…

第十四章:计算机新技术

文章目录: 一:云计算 二:大数据 三:物联网 四:人工智能 五:移动网络与应用 六:电子商务 七:虚拟实现 八:区块链 一:云计算 概念云基于⽹络&#xff0…

【大数据2025】MapReduce

MapReduce 基础介绍 起源与发展:是 2004 年 10 月谷歌发表的 MAPREDUCE 论文的开源实现,最初用于大规模网页数据并行处理,现成为 Hadoop 核心子项目之一,是面向批处理的分布式计算框架。基本原理:分为 map 和 reduce …