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

写在前面


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


问题背景说明

在面对不同币种货币转换的需求时,之前的代码结构和实现方式可能无法满足。为了使代码能够正确实现货币转换功能,需要对代码进行重构和方法调整。这不仅可以解决当前的需求变化问题,还能优化代码结构,为后续可能的功能扩展奠定更好的基础。

为了使不同币种货币转换的测试用例通过,需要对代码进行重构和方法调整,这是Python TDD适应变化的重要体现。

15.1 思路说明

Bank类中实现汇率存储和查询功能,在Money类的reduce方法中根据汇率进行货币转换。同时,调整相关类的结构和方法调用,确保代码逻辑的正确性。

15.2 测试代码

python 复制代码
import unittest


class Bank:
    def __init__(self):
        self.rates = {}

    def addRate(self, from_currency, to_currency, rate):
        self.rates[(from_currency, to_currency)] = rate

    def rate(self, from_currency, to_currency):
        if from_currency == to_currency:
            return 1
        return 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 = amount
        self.currency = currency

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

相关推荐
IT 行者3 小时前
GitHub Spec Kit 实战(六):/speckit.implement 怎么用、怎么审、怎么发现 spec 阶段的遗漏——五部曲收官
java·驱动开发·github·ai编程·claude
HEU_firejef5 小时前
TDD——测试驱动开发
驱动开发·tdd
暮云星影9 小时前
全志开发环境搭建及编译构建
linux·arm开发·驱动开发
编程圈子11 小时前
电机驱动开发学习3. 驱动原理与相关电路
驱动开发·学习
编程圈子1 天前
电机驱动开发学习2. 直流无刷电机工作原理
驱动开发·学习
智者知已应修善业1 天前
【用74LS151的实现(16序列信号发生器)】2024-6-1
驱动开发·经验分享·笔记·硬件架构·硬件工程
道一云黑板报1 天前
告别提示词工程:为什么“循环工程”才是 AI 编程的未来?
人工智能·驱动开发·软件工程·ai编程
天南散修2 天前
MT7916 BA流程
网络·驱动开发·wifi·802.11
Soari2 天前
EtherCAT Master Stack —— 面向工业实时控制的开源 EtherCAT 主站协议栈
驱动开发
天南散修2 天前
MT7916驱动中802.11转换为802.3
linux·网络·驱动开发·wifi·802.11