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

写在前面


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


问题背景说明

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

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

13.1 思路说明

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

13.2 测试代码

python 复制代码
import unittest


class Bank:
    def reduce(self, source, to):
        return Money.dollar(10)  # 暂时的哑实现


class Money:
    def __init__(self, amount, currency):
        self.amount = amount
        self.currency = currency

    def 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类功能不完善,但为后续实现多币种加法奠定了基础。

相关推荐
SmartRadio6 小时前
CH585M+MK8000、DW1000 (UWB)+W25Q16的低功耗室内定位设计
c语言·开发语言·uwb
rfidunion6 小时前
QT5.7.0编译移植
开发语言·qt
少林码僧6 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
rit84324996 小时前
MATLAB对组合巴克码抗干扰仿真的实现方案
开发语言·matlab
智航GIS6 小时前
10.4 Selenium:Web 自动化测试框架
前端·python·selenium·测试工具
jarreyer6 小时前
摄像头相关记录
python
宝贝儿好7 小时前
【强化学习】第六章:无模型控制:在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)
人工智能·python·深度学习·学习·机器学习·机器人
大、男人7 小时前
python之asynccontextmanager学习
开发语言·python·学习
hqwest7 小时前
码上通QT实战08--导航按钮切换界面
开发语言·qt·slot·信号与槽·connect·signals·emit
AC赳赳老秦7 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek