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

相关推荐
物随心转2 小时前
SD/MMC驱动开发
驱动开发
Tester_孙大壮3 小时前
第17章:Python TDD回顾与总结货币类开发
驱动开发
Tester_孙大壮7 小时前
第12章:Python TDD完善货币加法运算(一)
驱动开发
Tester_孙大壮7 小时前
第10章:Python TDD优化货币类方法与引入工厂方法
驱动开发
sukalot8 小时前
Windows蓝牙驱动开发-蓝牙 IOCTL
windows·驱动开发
嵌入(师)9 小时前
嵌入式驱动开发详解12(LCD驱动)
驱动开发
sukalot14 小时前
Windows 蓝牙驱动开发-BLE低功耗
windows·驱动开发
sukalot2 天前
windows蓝牙驱动开发-BLE音频(一)
windows·驱动开发
sukalot5 天前
Windows 蓝牙驱动开发-安装蓝牙设备
windows·驱动开发