第14章:Python TDD应对货币类开发变化(一)

news/2025/1/21 4:19:24/

写在前面


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

问题背景说明

在软件开发过程中,需求变化是不可避免的。在货币类开发中,客户可能提出实现不同币种货币转换的需求。通过编写新的测试用例来驱动代码的修改和扩展,能够使代码更好地适应需求变化,保持代码的灵活性和可维护性。

在开发过程中,需求可能会发生变化。比如需要实现不同币种货币的转换,这在Python TDD中需要通过编写新测试用例来驱动代码的修改。

14.1 思路说明

以将2瑞士法郎(Franc)转换成1美元(Dollar)为例,编写测试用例来验证转换功能。然后根据测试需求,在相关类中实现转换逻辑。

14.2 测试代码

import unittestclass Bank:def addRate(self, from_currency, to_currency, rate):passdef rate(self, from_currency, to_currency):passdef reduce(self, source, to):passclass Money:def __init__(self, amount, currency):self.amount = amountself.currency = currencydef reduce(self, bank, to):passclass 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()

14.3 源码说明

在测试类TestCurrencyConversion中,test_reduce_money_different_currency测试用例创建了一个Bank对象,并设置瑞士法郎到美元的汇率为2。创建一个金额为2的Franc对象,调用reduce方法进行货币转换,验证转换后的金额和货币类型是否正确。此时Bank类和Money类中的相关方法都是未实现的占位代码,后续将根据测试需求逐步完善。


http://www.ppmy.cn/news/1564846.html

相关文章

MongoDB 学习指南:深入探索非关系型数据库

MongoDB学习资料 MongoDB学习资料 MongoDB学习资料 在当今数字化时代,数据量呈爆炸式增长,数据结构也变得愈发复杂多样。传统的关系型数据库在处理一些大规模、高并发以及非结构化数据时,逐渐显露出局限性。而 MongoDB 作为一款领先的非关系…

MongoDB vs Redis:相似与区别

前言 在当今的数据库领域,MongoDB 和 Redis 都是备受关注的非关系型数据库(NoSQL),它们各自具有独特的优势和适用场景。本文将深入探讨 MongoDB 和 Redis 的特点,并详细对比它们之间的相似之处和区别,帮助…

ip归属地和所在地什么区别:解析网络身份与物理位置的差异‌

在数字世界的浩瀚海洋中,IP地址如同每艘船只的航海图坐标,引领着数据包的航行方向。而IP归属地与所在地,则是这趟旅程中两个至关重要的概念。它们虽紧密相关,却又各具特色,共同构成了网络世界与现实世界的桥梁&#xf…

Spring boot面试题----Spring Boot核心注解有哪些

一、@SpringBootApplication 功能: 这是一个组合注解,相当于同时使用了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解。它是 Spring Boot 应用程序的入口点,通常添加在应用程序的主类上,例如:@SpringBootApplication public class MyApplicatio…

【Flink系列】3. Flink部署

第3章 Flink部署 3.1 集群角色 3.2 Flink集群搭建 3.2.1 集群启动 0)集群规划 具体安装部署步骤如下: 1)下载并解压安装包 (1)下载安装包flink-1.17.0-bin-scala_2.12.tgz,将该jar包上传到hadoop102节…

vue3之组件通信

vue3之组件通信 Vue3 组件通信和 Vue2 的区别: 移出事件总线,使用 mitt 代替。vuex 换成了 pinia。把 .sync 优化到了 v-model 里面了。把 $listeners 所有的东西,合并到 $attrs 中了。$children被砍掉了。 常见搭配形式: 1、p…

CSS3 动画详解

1.基本概念 CSS3 动画允许您通过定义关键帧和一系列动画属性,在网页上创建动态的视觉效果。与传统的 JavaScript 动画相比,CSS3 动画更易于编写和维护,并且在性能方面也有不错的表现。它可以应用于 HTML 元素,使元素在页面上移动…

玄机-第二章 日志分析-apache日志分析的测试报告

目录 一、测试环境 二、测试目的 三、操作过程 Flag1 Flag2 Flag3 Flag4 Flag5 Flag6 四、结论 一、测试环境 靶场介绍:国内厂商设置的玄机靶场,以应急响应题目著名。 地址:https://xj.edisec.net/challenges/29 靶机IP&#xff…